C语言详解——字符函数的模拟实现

1.1 strlen

size_t  strlen (const  char  *  str);

1.strlen返回在字符串中‘\0’ 前面出现的字符个数(不包含'\0')

2.参数所指向的字符串必须以'\0'结尾,否则函数将返回随机值

3.函数返回类型为size_t,属于无符号数

1.1.2 strlen函数的模拟实现(三种方法)

1.计数器方式

int my_strlen(const char* str)
{
    int count=0;
    while(*str)
    {
       count++;
       str++;
    }

    return count;

}

2.不创建临时变量的递归方法

int my_strlen (const char * str)
{
    if(*str == '\0')
       return 0;
    else
       return my_strlen(str+1)+1;

}

3.指针相减得到元素个数的方式

int my_strlen(char * str)
{
     char *p = str;
     while(*p != '\0' )
          p++;
     return p-s;
}

1.2 strcpy

char*  strcpy(char * destination, const char * source );

1.源字符串必须以'\0'结束

2.源字符串中的'\0'也会被拷贝至目标空间

3.目标空间必须足够大且可变

1.2.2 strcpy模拟实现

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

1.3 strcat

char  *  strcat(char  *  destination,  const  char  *  source);

1,源字符串必须以'\0' 结束

2.目标空间必须足够大并且可修改

1.3.2 模拟实现 strcat

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

1.4 strstr

char * strstr( const  char *str1, const char *str2);

1,该函数用于查找str2是否为str1的子串

2.若是的话,返回str2中第一个与str1相同的字符的地址

3.若str2不是str1的一部分,则返回空指针

1.4.2 模拟实现strstr

char * strstr(const char *str1, const char *str2)
{
    char *cp = (char*) str1;
    char *s1;
    char *s2;
    if(!*str2)
    {
       return ((char * )str1);
    }
    while (*cp)
    {
       s1=cp;
       s2=(char *)str2;
       while(!(*s1-*s2) && *s1 && *s2)
       {
            s1++,s2++;
       }
       if(!*s2)
          return cp;
       cp++
    }
    return NULL;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值