452-strcpy、strcat、strcmp、strstr、strchr的实现

1、strcpy函数

char* strcpy(char* des, const char* src);

作用:

  • 是把从src地址开始,将含有字符串结束符的字符串 复制到 以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;
}

2、strcat函数

char *strcat(char *dest, const char *src)

作用:

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

思路:

  • 先将dest最后一个字符的地址记录下来,然后将src拷贝,即追加上去。
char* my_strcat(char* dest,const char* src)
{
  char *cp=dest;
  assert(src && dest);
  while(*dest!='\0')
  {
    dest++;
  }
  while(*dest++=*src++){};
  
 return cp;
}

3、strcmp函数

int strcmp(const char *str1, const char *str2)

作用:

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

思路:

  • 把两个字符串一个一个进行比较;
  • 当两个字符串不一样时,直接减,当两个字符串相等时,直接输出0。
int my_strcmp(const char* arr1,const char* arr2)
{
  assert(arr1 && arr2)
  while(*arr1==*arr2)
  {
   if(*arr1=='\0')
     return 0;
  }
 return *arr1-*arr2;
}

4、strstr函数

char *strstr(const char *haystack, const char *needle)

作用:

  • 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’。
  • 该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。
char * my_strstr(const char * str, const char * substr)
{
    assert(substr != NULL && str != NULL);
    const char * psub = substr;
    const char * pstr = str;

    while (*pstr)
    {
        const char * tmp = pstr;
        while (*tmp++ == *psub++);

        if (*psub == '\0')
            return pstr;

        psub = substr;
        pstr++;
    }

    return NULL;
}

5、strchr函数

 char *strchr(const char *str, int c) 

作用:

  • 在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。
  • str – 要被检索的 C 字符串。c – 在 str 中要搜索的字符。
char *my_strchr(const char *s,int c)  //返回的是你要找的字符的地址
{
	for(; *s !=  (char)c ; ++s)
	{
		if(*s == '\0')  //说明找完了
		return NULL//找完了还没有。那就直接返回空咯
	}
	return (char *)s;  //我们须要的字符的地址
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liufeng2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值