• 项目开发常见字符串处理模型-strstr-while/dowhile模型


    strstr-whiledowhile模型用于在母字符串中查找符合特征的子字符串。

    c语言库提供了strstr函数,strstr函数用于判断母字符串中是否包含子字符串,包含的话返回子字符串的位置指针,不包含的话返回NULL。

    可以用strstr函数+while模型或者 strstr函数+dowhile模型实现:

    1 strstr函数+while模型

    #define _CRT_SECURE_NO_WARNINGS
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
      int ncount = 0;
      char *p = "abcd156445abcd456444abcd46844564abcd";
      while (p = strstr(p, "abcd"))//指针p指向a
      {
        ncount++;
        p = p + strlen("abcd");
        if (*p == '')
        {
          break;
        }
      }
      printf("字符串中出现abcd的次数: %d ", ncount);  //运行可得4

      system("pause");
      return 0;
    }

    2 strstr函数+dowhile模型

    #define _CRT_SECURE_NO_WARNINGS
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
      int ncount = 0;
      char *p = "abcd156445abcd456444abcd46844564abcd";
      do
      {
        p = strstr(p, "abcd");
        if (p != NULL)
        {
          ncount++;
          p = p + strlen("abcd");//找到abcd,指针继续往前
        }
        else
        {
          break;
        }
      } while (*p != '');
      printf("字符串中出现abcd的次数: %d ", ncount);

      system("pause");
      return 0;
      }

    封装查找子字符串出现次数的API:

    #define _CRT_SECURE_NO_WARNINGS
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <stdbool.h>

    int getCount(char*mystr, char*sub, int*ncount)
    {
      bool ret = false;
      int tmpCount = 0;
      char*p = mystr;//记得函数中不要轻易改变形参的值

      //健壮代码
      if (mystr == NULL || sub == NULL)
      {
        ret = false;
        printf("fun getCount()err:%d (mystr == NULL || sub == NULL) ", ret);
        return ret;
      }

      do
      {
        p = strstr(p, sub);
        if (p != NULL)
        {
          tmpCount++;
          p = p + strlen(sub); //指针达到下次查找的条件
        }
        else
        {
          break;
        }
      } while (*p != '');

      *ncount = tmpCount; //间接赋值是指针存在的最大意义
      ret = true;
      return ret;
    }
    int main()
    {
      int count = 0;
      int ret = 0;
      char*p = "abcd156445abcd456444abcd46844564abcd";
      char *psub = "abcd";

      ret = getCount(p, psub, &count);
      if (ret <= 0)
      {
        printf("fun getCount()err:%d", ret);
      }
      printf("count:%d", count);
      system("pause");
      return 0;
    }

  • 相关阅读:
    Linux部署golang程序(无数据库访问)
    MySQL备份数据库mysqldump
    Linux命令netstat
    SQL优化01(转载)
    springcloud之gateway点滴
    关于数据库错误:serverTimeZone
    代码重构的重要性
    关于集合的泛型
    python 视频下载神器(you-get)
    linux下ssh
  • 原文地址:https://www.cnblogs.com/fengxing999/p/10264222.html
Copyright © 2020-2023  润新知