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;
}

posted @ 2023-02-25 21:39  燥zao  阅读(124)  评论(0编辑  收藏  举报