Tip: After the article is written, the table of contents can be automatically generated. For how to generate it, please refer to the help document on the right
Article Directory
1. Find a single dog
Only two numbers in an array appear once, and all other numbers appear twice.
Write a function to find these two numbers that only appear once.
#include<stdio.h>
//一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。
//编写一个函数找出这两个只出现一次的数字。
int * findonly(int arr[], int n){
int i, j, k;
int br[2];
int x = 0;
for (i = 0; i<n; i++)
{
k = 0;
for (j = 0; j<n; j++)
{
if (arr[j] == arr[i])
{
k++;
}
}
if (k == 1)
{
br[x] = arr[i];
x++;
}
}
return br;
}
void main(){
int ar[] = {
0, 2, 3, 2,4,4, 5, 5, 0, 6 ,7,7};
int n = sizeof(ar) / sizeof(ar[0]);
int *p=findonly(ar, n);
printf("%d %d", *p, *(p + 1));
}
Two, simulate strncat
#include<stdio.h>
#include<string.h>
#include<assert.h>
char *my_strncat(char *strDest, const char *strSrc, size_t count)
{
//参数检查和保护
assert(strDest != NULL && strSrc != NULL);
char *pDest = strDest;
const char *pSrc = strSrc;
//先查找Dest字符串的末尾
while (*pDest != '\0')
pDest++;
//实行连接拷贝
while (count-- > 0)
{
*pDest++ = *pSrc++;
}
//增加结束标记
*pDest = '\0';
return strDest;
}
void main()
{
char str1[20] = "Hello";
char *str2 = "world.";
printf("str1 = %s\n", str1);
char *pret = my_strncat(str1, str2, 3);
printf("str1 = %s\n", str1);
printf("str1 = %s\n", pret);
}
Three, simulate strncpy
#include<stdio.h>
#include<string.h>
#include<assert.h>
//模拟实现strncpy
char * my_strncpy(void *dest, const void *src, size_t count)
{
assert(dest != NULL && src != NULL);
char *pdest = (char *)dest;
const char *psrc = (const char *)src;
while (count-- > 0){
*pdest++ = *psrc++;
}
pdest = '\0';
return dest;
}
void main(){
char *str = "abcdse";
char arr[20] = {
0 };
printf("%s\n", my_strncpy(arr, str,4));
}
Fourth, simulate atoi
#include<stdio.h>
//将字符串转化为一个整数
int myatoi(char *str){
long number = 0;
int flag = 1; //判断符号位
if (NULL == str)
{
printf("str is NULL");
return 0;
}
while (*str == ' ') //空格
{
str++;
}
if (*str == '-') //符号位
{
flag = -1;
str++;
}
while ((*str >= '0') && (*str <= '9'))//转化
{
number = number * 10 + *str - '0';//用第一个符号数字和0-
str++;
}
return flag*number;
}
void main(){
char a[] = "-100";
char b[] = "101";
printf("%d\n", atoi(a));
printf("%d\n", myatoi(b));
}