strcmp,strcat,strstr模拟实现
一、strcmp模拟实现
- 1.strcmp原理
- 2.基于其原理进行模拟实现
二、strcat模拟实现
- 1.strcat原理
- 2.基于其原理进行模拟实现
三、strstr模拟实现
- 1.strstr原理
- 2.基于其原理进行模拟实现
一、1. strcmp原理
strcmp进行字符串比较,将两个字符串进行比较,当src大于dest时,返回大于0的数,等于时返回0,小于时返回小于0的数.
效果如下:
ps:在vs的编译器下,strcmp的比较方式和输出结果为:
当src大于dest时,返回1,等于时返回0,小于时-1.
2.模拟实现strcmp
int my_strcmp(char* src,char* dest)
{
while(*src==*dest){
if(*src=='\0'){
return 0; }
src++;
dest++;
}
return (*src-*dest);
}
ps:比较的是两个相同长度的字符串
vs的库函数实现的strcmp如下:
二、1.strcat原理
将src所指向的字符串追加到dest所指向的字符串末尾。
效果如下:
2.模拟实现strcat
char* my_strcat(char* dest,char* src)
{
char* bgn=arr1;
while(*dest)
{dest++;}
while((*dest=*src)!='\0')
{dest++;
src++; }
return bgn;
}
库函数实现的strcat:
三、1.strstr的原理
strstr原理:搜索字符串haystack是否为needle的子字符串。
效果如下:
2.模拟实现strstr
char* my_strstr(const char* hacky,const char* needle){
const char* str1=NULL;
const char* str2=NULL;
const char* cur=hacky;
if(*needle=='\0')
{return hacky;}
while(*cur)
{ str1=cur;
str2=needle;
while(*str2&&*str1&&*str1==*str2)
{str1++;
str2++;}
if(str2=='\0')
{return cur;}
cur++;
}
return 0;
}