VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 502|回复: 1

[交流] C学习之路的点滴记录--字符串操作函数

[复制链接]
13_avatar_middle
最佳答案
1 
在线会员 发表于 2021-5-11 21:59:03 | 显示全部楼层 |阅读模式
函数名: strchr
原  型: char *strchr(char *str, char ch);
程序示例:printf("%s\n",strchr("hello world",'l')); //输出llo world
  1. char* my_strchr(char* str, char ch)
  2. {
  3.         int i = 0;
  4.         while (str[i])
  5.         {
  6.                 if (str[i] != '\0')
  7.                 {
  8.                         return &str[i];
  9.                 }
  10.                 i++;
  11.         }
  12.         return NULL;
  13. }

  14. int main()
  15. {
  16.         char str[] = "hello world";
  17.         char* p = my_strchr(str, 'l');
  18.         if (p == NULL)
  19.         {
  20.                 printf("未找到 \n");
  21.         }
  22.         else
  23.         {
  24.                 printf("%s \n",p);
  25.         }
  26.         return EXIT_SUCCESS;
  27. }
复制代码


第二种写法
  1. char* my_strchr(char* str, char ch)
  2. {
  3.         while (*str)
  4.         {
  5.                 if (*str == ch)
  6.                 {
  7.                         return str;
  8.                 }
  9.                 str++;
  10.         }
  11.         return NULL;
  12. }
复制代码


函数名: strstr
原  型: char *strstr(char *str1, char *str2);
程序示例:
       printf("%s \n", strstr("abcdef123", "c"));  //结果显示为:cdef123
        printf("%s \n", strstr("abcdef123", "12")); //结果为123
  1. char* my_strstr(char* str1, char* str2)
  2. {
  3.         char* fstr = str1;
  4.         char* rstr = str1;
  5.         char* tstr = str2;
  6.         while (*fstr)
  7.         {
  8.                 rstr = fstr;
  9.                 while (*fstr==*tstr&&*fstr!='\0')
  10.                 {
  11.                         fstr++;
  12.                         tstr++;
  13.                 }
  14.                 if (*tstr == '\0')
  15.                 {
  16.                         return rstr;
  17.                 }
  18.                 tstr = str2;
  19.                 fstr = rstr;
  20.                 fstr++;
  21.         }
  22.         return NULL;
  23. }


  24. int main()
  25. {
  26.         char str1[] = "hello world";
  27.         char str2[] = "llo";
  28.         char* p=my_strstr(str1, str2);
  29.         printf("%s \n", p);
  30.         return EXIT_SUCCESS;
  31. }
复制代码


函数名: strspn 查找非str2字符集的字符出现的第一个位置的下标
原  型: int strspn(char *str1, char *str2);
      printf("%d \n", strspn("111cde123", "12")); //结果为3
        printf("%d \n", strspn("cdccc1def123", "cd"));//结果为5

函数名: strcspn
原  型: int strcspn(char *str1, char *str2);
        printf("%d \n", strcspn("111cdef123", "cd"));//结果3
        printf("%d \n", strcspn("1cdccc1def123", "cd")); //结果为1

函数名: strrchr
原  型: char *strrchr(char *str, char c);
程序例: printf("%s \n", strrchr("1cdccc1def123",'d'));   结果为 def123
程序例: printf("%s \n", strrchr("1cdccc1def123d",'1'));   结果为123d

函数名: strpbrk
原  型: char *strpbrk(char *str1, char *str2);
程序例:  printf("%s \n", strpbrk("1cdccc1def123d","fe")); //结果为ef123d

函数名: strtok
原  型: char *strtok(char *str1, const char *str2);
程序例:
char s1[]="d+1cdccc1*def1,23,dad";          
printf("%s \n", strtok(s1,"*"));
printf("%s \n",s1);
结果为:
d+1cdccc1
d+1cdccc1

函数名: strlen
原  型: char * ch
  1. int my_strlen(char* ch)
  2. {
  3.         int i = 0;
  4.         while (ch[i] != '\0')
  5.         {
  6.                 i++;
  7.         }
  8.         return i;
  9. }

  10. int main()
  11. {
  12.         char ch[] = "hello world";
  13.         int len = my_strlen(ch);
  14.         printf("%d \n", len);

  15.         return EXIT_SUCCESS;
  16. }
复制代码

第二种写法
  1. int my_strlen(char* ch)
  2. {
  3.         char* temp = ch;
  4.         while (*temp != '\0')temp++;
  5.         return temp - ch;
  6. }
复制代码

  1. char* my_strstr(char* str1, char* str2)
  2. {
  3.         char* fstr = str1;
  4.         char* rstr = str1;
  5.         char* tstr = str2;
  6.         while (*fstr)
  7.         {
  8.                 rstr = fstr;
  9.                 while (*fstr == *tstr&&*fstr != '\0')
  10.                 {
  11.                         fstr++;
  12.                         tstr++;
  13.                 }
  14.                 if (*tstr == '\0')
  15.                 {
  16.                         return rstr;
  17.                 }
  18.                 tstr = str2;
  19.                 fstr = rstr;
  20.                 fstr++;
  21.         }
  22.         return NULL;
  23. }

  24. //字符串出现次数
  25. int main()
  26. {
  27.         char*str = "11abcd222323abcd333abcd444qqq";
  28.         char ch[] = "abcd";
  29.         char* p = my_strstr(str, ch);
  30.         int count = 0;
  31.     while (p!=NULL)
  32.     {
  33.                
  34.                         count++;
  35.                 p = p + strlen(ch);
  36.                 p = my_strstr(p, ch);
  37.     }
  38.         printf("在字符串中出现%d次 \n", count);
  39.     return EXIT_SUCCESS;
  40. }
复制代码


do-while
  1. //字符串出现次数
  2. int main()
  3. {
  4.         char*str = "11abcd222323abcd333abcd444qqq";
  5.         char ch[] = "abcd";
  6.         char* p = my_strstr(str, ch);
  7.         int count = 0;
  8.    
  9.         do
  10.         {
  11.                 if (p)
  12.                 {
  13.                         count++;
  14.                         p += strlen(ch);
  15.                         p = my_strstr(p, ch);
  16.                 }
  17.         } while (p);
  18.         printf("%d \n", count);
  19.     return EXIT_SUCCESS;
  20. }
复制代码

评分

参与人数 1驿站币 +2 热心值 +2 收起 理由
58_avatar_small thzzl + 2 + 2 支持原创!

查看全部评分





上一篇:C学习之路的点滴记录---基础指针数组--大牛飘过
下一篇:c++习题求解
58_avatar_middle
最佳答案
52 
online_vip 发表于 2021-5-12 16:24:33 | 显示全部楼层
向你学习!
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2021-9-27 06:50

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表