7.模拟实现atoi
#include
long my_atoi(const char* parr)
{
long number = 0;
int flag = 1;
if (NULL == parr)
{
printf("parr is NULL");
}
while (*parr == ' ')
{
parr++;
}
if (*parr == '-')
{
flag == -1;
parr++;
}
while ((*parr >= '0') && (*parr <= '9'))
{
number = number * 10 + *parr - '0';
parr++;
}
return flag * number;
}
int main()
{
char arr[] = "-1234";
long ret = my_atoi(arr);
return 0;
}
#include
atoi:把字符串nptr转换为int。
(理解一下就是让字符串变成合法数字)
int main()
{
int i=0;
i=atoi("123");
printf("i=%d\n",i); // 输出i=123
i=atoi("123aaa");
printf("i=%d\n",i); // 输出i=123,合法数字后的abc被忽略。
i=atoi("aaa123");
printf("i=%d\n",i); // 输出i=0,数字前有字符为非法。
i=atoi("+123");
printf("i=%d\n",i); // 输出i=123,+是合法字符。
i=atoi("-123");
printf("i=%d\n",i); // 输出i=-123,-是合法字符。
}
8.模拟实现strncat
#include
#include
#include
#include
char *my_strncat(char *dest, const char*src, int count)
{
char*ret =dest;//留下最初地址,为了之后连接完还能返回
assert(dest);
assert(src);//检测NULL
while(*dest)
{
dest++;//运行到dest的末尾'\0'位置,再连接*src所需字符
}
while(count&&*src)//当count为0后,便不再进行连接
{
*dest++= *src++;//用*src覆盖掉*dest'\0'后字符,达到连接目的
count--;
}
*dest='\0';//结束标志
return (char*)ret;
}
int main()
{
char arr[20] = "hello";
char *p = " bit";
printf("%s\n",my_strncat(arr,p,4));
system("pause");//使停顿
return 0;
}
dest
– 指向目标数组,该数组包含了一个C
字符串,且足够容纳追加后的字符串,包括额外的空字符。src
– 要追加的字符串n
– 要追加的最大字符数。
9.模拟实现strncpy
#include
#include
#include
#include
char * My_strncpy(char * dest, const char *src, size_t n)
{
assert(dest);
assert(src);
char *ret = dest;
while (n--)
{
*dest++ = *src++;
}
return ret;
}
int main()
{
char str1[20] = "123456789";
char str2[20] = "abcde";
My_strncpy(str1, str2, 5);
printf("str1: %s \n", str1);
system("pause");
return 0;
}
dest
– 指向目标数组,该数组包含了一个C
字符串,且足够容纳追加后的字符串,包括额外的空字符。src
– 要覆盖的字符串n
– 要覆盖的最大字符数。
10.找单身狗
一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。
编写一个函数找出这两个只出现一次的数字。
#include
void bubblesort(int* arr, int n)//先进行冒泡排序,使得相同的数字能够排在一起
{
int count = n;
while (count > 0)
{
int flag = 0;
//冒泡排序
for (int i = 1; i < count; ++i)
{
if (arr[i - 1] > arr[i])
{
int t = arr[i];
arr[i] = arr[i - 1];
arr[i - 1] = t;
flag = 1;
}
}
if (flag = 0)
{
break;
}
--count;
}
}
find_single(int* arr, int n)
{
//如果相邻的两个数相等i+2,如果相邻的两个数不相等i+1
printf("单身狗为:");
for (int i = 0; i < n;)
{
if (arr[i] == arr[i + 1])//成双了,不是单身狗
{
i += 2;//向后移动2个,判断新的数字
}
else
{
printf("%d ", arr[i]);
++i;
}
}
printf("\n");
}
int main()
{
int arr[] = { 17,10,1, 1, 8, 2, 9, 9 ,3, 4, 4, 8, 6, 6, 13, 13,10};
int n = sizeof(arr) / sizeof(int);
bubblesort(arr, n);
find_singledog(arr, n);
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)