我是靠谱客的博主 典雅音响,最近开发中收集的这篇文章主要介绍模拟实现strcpy、strcmp、strcat和strstr函数一、对应字符串操作库函数介绍二、模拟实现,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
文章目录
- 一、对应字符串操作库函数介绍
- 1、strcpy
- 2、strcmp
- 3、strcat
- 4、strstr
- 二、模拟实现
- 1、strcpy
- 2、strcmp
- 3、strcat
- 4、strstr
一、对应字符串操作库函数介绍
1、strcpy
strcpy是字符串拷贝的库函数,可以将源字符串拷贝到目的字符串当中去,并且将源字符串的 ‘ ’ 也拷贝过去。
2、strcmp
strcmp是字符串比较函数,比较给定两个字符串的大小
例如strcmp(arr1, arr2),函数的返回值如下
如果字符串arr1>arr2 返回一个大于0的数
如果字符串arr1=arr2 返回 0
如果字符串arr1<arr2 返回一个小于0的数
3、strcat
字符串追加函数,从目标字符串的第一个 为起点开始拷贝,源字符串的 也会拼接到目的字符串
4、strstr
寻找子串的函数,如果string存在与strCharSet相同的字符串,return string中相同字符串中的第一个字符的地址
二、模拟实现
1、strcpy
//char* my_strcpy(char* dest,const char* src)
//{
// assert(dest && src);
// char* ret = dest;
// while (*src)
// {
//
*dest = *src;
//
dest++;
//
src++;
// }
// *dest = *src;
// return ret;
//}
//改进
char* my_strcpy(char* dest, const char* src)
{
assert(dest && src);
char* ret = dest;
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
char arr1[20] = { 0 };
char arr2[] = "Hello World";
my_strcpy(arr1,arr2);
printf("%sn", arr1);
return 0;
}
实现效果
2、strcmp
int my_strcmp(const char* str1,const char* str2)
{
assert(str1 && str2);//断言,如果str1或str2为空指针就会报警告
while (*str1 && *str2)
{
if (*str1 == *str2)
{
str1++;
str2++;
}
else
return (int)(*str1 - *str2);
}
if ((*str1 == 0 && *str2 != 0) || (*str1 != 0 && *str2 == 0))
{
return (int)(*str1 - *str2);
}
else
return 0;
}
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abcde";
int ret = my_strcmp(arr1,arr2);
printf("%dn", ret);
return 0;
}
实现效果
3、strcat
char* my_strcat(char* dest,const char* src)
{
assert(*dest && *src);
char* ret = dest;
//找
while (*dest)
{
dest++;
}
//拷贝
while (*dest++=*src++)
{
;
}
return ret;
}
int main()
{
char arr1[20] = "Hello ";
char arr2[] = "World";
//my_strcat(arr1,arr2);
printf("%sn", my_strcat(arr1, arr2));
return 0;
}
实现效果
4、strstr
char* my_strstr(const char* buf1,const char* buf2)
{
assert(*buf1 && *buf2);
char* s1 = NULL;
char* star1 = (char*)buf1;
char* star2 = (char*)buf2;
if (*buf2 =='