ITPub博客

首页 > 应用开发 > C/C++ > 模拟实现不受限制的字符串函数--C语言版

模拟实现不受限制的字符串函数--C语言版

原创 C/C++ 作者:每天和键盘在一起 时间:2023-05-18 19:32:26 0 删除 编辑

C语言中提供了许多十分好用的库函数,一旦我们掌握了它们,我们使用C语言写代码就会变得更加得心应手。


1.strlen

strlen函数就是计算字符串的长度的,它会一直读取到\0,它的返回值就是在字符串中'\0' 前面出现的字符个数(不包括\0)。 而了解strlen的实现原理也会让我们更好的理解代码


//模拟实现strlen

// 计算器版本

//#include<stdio.h>

//#include<assert.h>

//int my_strlen(const char *str)

//{

//  assert(str);

//  int count = 0;

//  while (*str++ != 0)

//  {

//    count++;

//  }

//  return count;

//}

//

//int main()

//{

//  char arr[] = {"abcdef"};

//  int ret = my_strlen(arr);

//  printf("%d", ret);

//  return 0;

//}



当然,strlen绝对不止这一种写法,如果各位想看,可以移步 strlen的三种模拟实现方法


2.stccpy

strcpy是将字符串b复制到字符串a上,其中源字符串必须要以\0结束,并且目标字符串必须要有足够大的空间


#include<stdio.h>

#include<string.h>

void mine_strcpy(char* dest, char* sou)

{

  while (*dest++ = *sou++)//当sou将\0传给dest时,while里面的值是0,自动结束了循环---既copy了\0

                          //又使循环停止

  {

    ;

  }

}

int main()

{

  char arr1[] = "aaaaaaaaaaaaaa";

  char arr2[] = "hello";

  mine_strcpy(arr1, arr2);

  printf("%s\n", arr1);

  return 0;

}


3.strcat

strcat是字符串追加函数,目标字符串必须要有足够大的空间去容纳原字符串,并且原字符串必须要以\0结尾 strcat的模拟实现:首先需要找到目标字符串的\0位置,接着要在\0的位置,将要复制的字符串拷贝过去即可。


#include<stdio.h>

#include<string.h>

#include<assert.h>

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

{

   assert(dest && src);

   char* ret = dest;

   //1.找到目标字符串的\0

   while (*dest)

   {

      dest++;

   }

   //2.接着追加过去(包括\0)(就是strcpy的思路)

   while (*dest++ = *src++)

   {

      ;

   }

   return ret;

}

int main()

{

   char arr1[50] = {"stay foolish,"};

   char arr2[20] = {"stay hungry"};

   //my_strcat(arr1, arr2);

   printf("%s", my_strcat(arr1, arr2));//链式访问

   return 0;

}


4.strcmp

strcmp就是比较两个字符串的大小 strcmp的实现思路就是一个一个字符的进行比较,知道找到不一样的或者全部一样的为止


//模拟实现strcmp

#include<stdio.h>

#include<assert.h>

int my_strcmp(const char* p,const char* q)

{

  assert(p && q);

  while (*p == *q)

  {

    if (*p == '\0')//*q也为'\0'

    {

      return 0;

    }

    p++;

    q++;

  }

  //if (*p > *q)

  //  return 1;

  //else

    //return -1;

  return  *p - *q;

}

int main()

{

  char p[] = "abcd";

  char q[] = "abe";

  int ret = my_strcmp(p, q);

  if (ret > 0)

    printf("p>q\n");

  else if (ret < 0)

    printf("p<q\n");

  else

    printf("p==q\n");

  return 0;

}


以上介绍的都是长度不受限制等函数, 欢迎关注,感谢大家的支持!


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70030112/viewspace-2953163/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2023-05-17

  • 博文量
    12
  • 访问量
    6011