目录
1.模拟实现strncat
在系统库函数中,存在strncat函数,它用于字符串的追加,就是在一个字符串后面追加一个字符串,它的函数原型为:
char *strncat(char *strDest,const *strSource,size_t count);
*strDest 为目标字符串 *strSource为源字符串,count为需要追加的字符串个数。
1.1代码编写
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
typedef unsigned int uint;
char *my_strncat(char *dest, const char *src, uint count)//模拟实现strncat函数
{
assert(dest);
assert(src);
int *ret = dest;
while (*dest)
{
dest++; //找到dest中的\0
}
while (count--)
{
*dest++ = *src++;
}
*dest = '\0';
return ret;
}
//程序测试
int main()
{
char arr[20] = "abcdef";
int len = strlen(arr);
my_strncat(arr, arr, len);
printf("%s\n", arr);
system("pause");
return 0;
}
1.2结果如下
2.模拟实现strncpy
char *strncpy(char *strDest,const *strSource,size_t count);
*strDest 为目标字符串 *strSource为源字符串,count为需要将源字符串中字符拷贝到目标字符串的字符个数。
注意:如果源字符串长度小于count,则拷贝完源字符串之后在目标字符串后面追加0,知道count个
2.1代码编写
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";
printf("%s", My_strncpy(str1, str2, 3));
}
2.2结果如下
3.找单身狗
一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。
编写一个函数找出这两个只出现一次的数字。
3.1代码编写
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<assert.h>
void find_two_diff_num(int arr[], int sz, int *p1, int *p2)
{
int i = 0;//循环变量
int ret = 0;
int pos = 0;
*p1 = 0;//数字1的地址
*p2 = 0;//数字2 的地址
//1.把所有数字异或
for (i = 0; i < sz; i++)
{
ret ^= arr[i];//循环到最后一次的结果是5^6,即就是101^110=011
}
//2.找ret二进制中为1的一位
for (i = 0; i < 32; i++)
{
if (((ret >> i) & 1) == 1)//上一步两个数异或的后两位为1
{
pos = i;
break;
}
}
//分组
for (i = 0; i < sz; i++)
{
if (((arr[i] >> pos) & 1) == 1)
{
(*p1) ^= arr[i];
}
}
(*p2) = (*p1) ^ ret;
}
int main()
{
int arr[] = { 1, 2, 5, 6, 8, 1, 6, 2, 9, 8 };
int sz = sizeof(arr) / sizeof(arr[0]);//数组大小
int num1 = 0;//数字1
int num2 = 0;//数字2
find_two_diff_num(arr, sz, &num1, &num2);
printf("num1=%d,num2=%d\n", num1, num2);
system("pause");
return 0;
}
3.2结果如下
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/119597.html