strcpy,strcat,strcmp,strstr的模拟实现

用my_strcpy、my_strcat、my_strcmp、my_strstr这四个函数来分别模拟实现库函数strcpy、strcat、strcmp、strstr。

1.strcpy

strcpy(dest,src)函数是把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间中,而且src和dest所指内存区域不可以重叠。这就要求dest必须有足够的空间来容纳src的字符串。

思路:对src字符串一个一个进行拷贝,当遇到NULL时,dest停止拷贝。

char* my_strcpy(char *dest,const char *src)
{
  char *cp=dest;
  assert(src && dest);
  while(*dest++=*src++)
  {
   ;
  }
  return cp;
}

int main()
{
    char arr[80]={0};
    printf("string=%s\n",my_strcpy(arr,"hello world"));
    return 0;
}

结果:hello world

2.strcat

strcat(dest,src)是把src所指字符串添加到dest结尾处(覆盖dest结尾处的‘\0’),src和dest所指内存区域不可以重叠,所以dest必须有足够的空间来容纳。最后结果返回的是指向dest的指针。

思路:先将dest最后一个字符的地址记录下来,然后将src拷贝,即追加上去。

char* my_strcat(char* dest,char* src)
{
  char *cp=dest;
  assert(src && dest);
  while(*dest!='\0')
  {
    dest++;
  }
  while(*dest++=*src++)
  {
    ;
  }
 return cp;
}

int main()
{
   char arr1[15]="abcd";
   char *arr2="ef";
   printf("%s\n",my_strcat(arr1,arr2));
   return 0;
}

结果:abcdef

3.strcmp

strcmp(str1,str2)是用来比较两个字符串的,设这两个字符串为str1,str2,若str1=str2,则返回零;若str1 < str2,则返回负数;若str1>str2,则返回正数。例如:abcd>abcc。

思路:把两个字符串一个一个进行比较,当两个字符串不一样时,直接减,当两个字符串相等时,直接输出0。

int my_strcmp(char* arr1,char* arr2)
{
  assert(arr1 && arr2)
  while(*arr1==*arr2)
  {
   if(*arr1=='\0')
     return 0;
  }
 return *arr1-*arr2;
}

int main()
{
 char *arr1="abcde";
 char *arr2="abcd";
 int ret=my_strcmp(arr1,arr2);
 printf("%d\n",ret);
}

结果:101

4.strstr

函数的定义:char* my_strstr(const char* dest,const char*src){}。其中,dest指向的是目标字符串,也就是你需要比较的字符串,src指向的是源字符串,也就是用来被比较的字符串。找不到就可以返回一个空指针。

思路:可以建立两个指针,通过遍历的方式逐个访问字符串,并对这两个指针一一比较。

char *my_strstr(char *s1,const char*s2)
{
    int n;
    printf("%x\n",s1);
    if(*s2)
    {
        while(*s1)
        {
            for(n=0;*(s1+n)==*(s2+n);n++)
            {
                if(!*(s2+n+1))
                    return(char*)s1;
            }
            s1++;
        }
        return NULL;
    }
    else
    printf("LLHH!\n");
        return (char*)s1;
}

//test
void main()
{
char aa[20]="aabb";
char *bb="bb";
char *cc;
cc=my_strstr(aa,bb);
printf("%x\n",cc);
}

猜你喜欢

转载自blog.csdn.net/qq_40840459/article/details/79783316
今日推荐