鸡蛋厂家
免费服务热线

Free service

hotline

010-00000000
鸡蛋厂家
热门搜索:
成功案例
当前位置:首页 > 成功案例

看一看:【字符串处理算法】最长连续字符及其出现次数的算法设计及C代码实现_1

发布时间:2022-03-31 17:22:26 阅读: 来源:鸡蛋厂家
【字符串处理算法】最长连续字符及其出现次数的算法设计及C代码实现 作者:周兆熊 2016-12-29 17:07:59 开发 开发工具 算法 今天主要讲讲最长连续字符及其出现次数的算法设计及C代码实现。

一、需求描述

输入一个字符串,编写程序找出这个字符串中的最长连续字符,并求出其连续出现的次数。

例如,,123444445中的最长连续字符是4,其连续出现的次数为5;,abcddef中的最长连续字符是d,其连续出现的次数为2;,ab中的最长连续字符是a,其连续出现的次数为1。

二、算法设计

我们可以采取逐个比较字符串中各个字符的办法来获取最长连续字符及其连续出现的次数。程序的总体流程如图1所示。

图1 程序的总体流程

三、特殊流程考虑

在编写程序的过程中,我们要对输入的字符串的长度及格式多做考虑,如:

1.如果输入的字符串中含有空格,那么我们只处理空格之前的字符串。

2.输入的字符串中可以包含数字、字母及一些特殊的字符,但不能包含中文字符。

四、程序代码

  1. /**********************************************************************
  2. *版权所有(C)2016,ZhouZhaoxiong。
  3. *
  4. *文件名称:LongestContinChars.c
  5. *文件标识:无
  6. *内容摘要:寻找一个字符串中最长连续字符及其个数
  7. *其它说明:例如,"aabbbc"的最长连续字符为b,个数为3
  8. *当前版本:V1.0
  9. *作者:ZhouZhaoxiong
  10. *完成日期:20160316
  11. *
  12. **********************************************************************/
  13. #include<stdio.h>
  14. //重新定义数据类型
  15. typedefsignedcharINT8;
  16. typedefintINT32;
  17. typedefunsignedintUINT32;
  18. //函数声明
  19. voidGetLongestContinChars(INT8*pszInputStr);
  20. /**********************************************************************
  21. *功能描述:主函数
  22. *输入参数:无
  23. *输出参数:无
  24. *返回值:0-执行成功其它-执行失败
  25. *其它说明:无
  26. *修改日期版本号修改人修改内容
  27. *---------------------------------------------------------------------
  28. *20160316V1.0ZhouZhaoxiong创建
  29. ***********************************************************************/
  30. INT32main()
  31. {
  32. INT8szInputStr[100]={0};
  33. UINT32iPosFlag=0;
  34. printf("Pleaseinputthestring:\n");
  35. scanf("%s",szInputStr);
  36. printf("InputStr=%s\n",szInputStr);
  37. //先判断是否有中文字符
  38. for(iPosFlag=0;iPosFlag<strlen(szInputStr);iPosFlag++)
  39. {
  40. if(szInputStr[iPosFlag]<0)//小于0则表示含有中文字符
  41. {
  42. printf("%shasChinesecharacter,pleasecheck!\n",szInputStr);
  43. return-1;
  44. }
  45. }
  46. //再调用函数获取最长连续字符及其个数
  47. GetLongestContinChars(szInputStr);
  48. return0;
  49. }
  50. /**********************************************************************
  51. *功能描述:获取连续出现次数最多的字符及其连续出现次数
  52. *输入参数:pszInputStr-输入字符串
  53. *输出参数:无
  54. *返回值:无
  55. *其它说明:无
  56. *修改日期版本号修改人修改内容
  57. *---------------------------------------------------------------------
  58. *20160316V1.0ZhouZhaoxiong创建
  59. ***********************************************************************/
  60. voidGetLongestContinChars(INT8*pszInputStr)
  61. {
  62. INT8cCompareChar='\0';
  63. INT8cLongestContinChar='\0';
  64. UINT32iMaxLen=1;
  65. UINT32iCharCount=1;
  66. UINT32iPosFlag=0;
  67. if(pszInputStr==NULL)
  68. {
  69. return;
  70. }
  71. cCompareChar=pszInputStr[0];//从***个字符开始比较
  72. cLongestContinChar=pszInputStr[0];
  73. for(iPosFlag=1;iPosFlag<strlen(pszInputStr);iPosFlag++)
  74. {
  75. if(pszInputStr[iPosFlag]==cCompareChar)
  76. {
  77. iCharCount++;//对相同字符计数加1
  78. }
  79. else
  80. {
  81. iCharCount=1;//字符不同时计数变为1
  82. cCompareChar=pszInputStr[iPosFlag];//重新比较新字符
  83. }
  84. if(iCharCount>iMaxLen)//获取连续出现次数最多的字符及其出现次数
  85. {
  86. iMaxLen=iCharCount;
  87. cLongestContinChar=pszInputStr[iPosFlag];
  88. }
  89. }
  90. printf("连续出现次数最多的字符是:%c\n连续出现的次数是:%d\n",cLongestContinChar,iMaxLen);
  91. }

五、程序测试

我们将编写好的程序,LongestContinChars.c上传到Linux机器,并使用,gcc -g -oLongestContinChars LongestContinChars.c命令对该程序进行编译,生成,LongestContinChars文件。下面对程序进行详细的测试。

1.输入字符串为,ababbba时,程序运行情况如下:

  1. Pleaseinputthestring:
  2. ababbba
  3. InputStr=ababbba
  4. 连续出现次数最多的字符是:b
  5. 连续出现的次数是:3

2.输入字符串为,123321时,程序运行情况如下:

  1. Pleaseinputthestring:
  2. 123321
  3. InputStr=123321
  4. 连续出现次数最多的字符是:3
  5. 连续出现的次数是:2

3.输入字符串为房屋拆迁需要评估吗,!@##$%时,程序运行情况如下:

  1. Pleaseinputthestring:
  2. !@##$%
  3. InputStr=!@##$%
  4. 连续出现次数最多的字符是:#
  5. 连续出现的次数是:2

4.输入字符串为,abcdef时,程序运行情况如下:

  1. Pleaseinputthestring:
  2. abcdef
  3. InputStr=abcdef
  4. 连续出现次数最多的字符是:a
  5. 连续出现的次数是:1

5.输入字符串为,我们123时什么房子算违建房标准,程序运行情况如下:

  1. Pleaseinputthestring:
  2. 我们123
  3. InputStr=我们123
  4. 我们123hasChinesecharacter,pleasecheck!

六、需求扩展

基于本文中的需求和程序,我们可考虑对需求进行以下扩展:

1.不区分字母的大小写,即如果输入的字符串为,AAAaaa,那么程序输出最长连续字符为A或a,出现次数为6。

2.不限制字符串中不能出现中文字符,即如果输入的字符串为,窝窝头123,那么程序输出最长连续字符为窝,出现次数为2。

【本文是51CTO专栏作者周兆熊的原创文章,作者微信公众号:周氏逻辑(logiczhou)】

戳这里,看该作者更多好文