自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

【字符串處理算法】最長連續(xù)字符及其出現(xiàn)次數(shù)的算法設(shè)計及C代碼實現(xiàn)

開發(fā) 開發(fā)工具 算法
今天主要講講最長連續(xù)字符及其出現(xiàn)次數(shù)的算法設(shè)計及C代碼實現(xiàn)。

一、需求描述

輸入一個字符串,編寫程序找出這個字符串中的最長連續(xù)字符,并求出其連續(xù)出現(xiàn)的次數(shù)。

例如,“123444445”中的最長連續(xù)字符是4,其連續(xù)出現(xiàn)的次數(shù)為5;“abcddef”中的最長連續(xù)字符是d,其連續(xù)出現(xiàn)的次數(shù)為2;“ab”中的最長連續(xù)字符是a,其連續(xù)出現(xiàn)的次數(shù)為1。

代碼

二、算法設(shè)計

我們可以采取逐個比較字符串中各個字符的辦法來獲取最長連續(xù)字符及其連續(xù)出現(xiàn)的次數(shù)。程序的總體流程如圖1所示。

圖1 程序的總體流程

三、特殊流程考慮

在編寫程序的過程中,我們要對輸入的字符串的長度及格式多做考慮,如:

1.如果輸入的字符串中含有空格,那么我們只處理空格之前的字符串。

2.輸入的字符串中可以包含數(shù)字、字母及一些特殊的字符,但不能包含中文字符。

四、程序代碼

  1. /********************************************************************** 
  2. * 版權(quán)所有 (C)2016, Zhou Zhaoxiong。 
  3. * 文件名稱: LongestContinChars.c 
  4. * 文件標識: 無 
  5. * 內(nèi)容摘要: 尋找一個字符串中最長連續(xù)字符及其個數(shù) 
  6. * 其它說明: 例如, "aabbbc"的最長連續(xù)字符為b, 個數(shù)為3 
  7. * 當(dāng)前版本: V1.0 
  8. * 作    者: Zhou Zhaoxiong 
  9. * 完成日期: 20160316 
  10. **********************************************************************/ 
  11. #include <stdio.h> 
  12.  
  13. // 重新定義數(shù)據(jù)類型 
  14. typedef signed   char  INT8; 
  15. typedef          int   INT32; 
  16. typedef unsigned int   UINT32; 
  17.  
  18. // 函數(shù)聲明 
  19. void GetLongestContinChars(INT8 *pszInputStr); 
  20.  
  21.  
  22. /********************************************************************** 
  23. * 功能描述: 主函數(shù) 
  24. * 輸入?yún)?shù): 無 
  25. * 輸出參數(shù): 無 
  26. * 返 回 值: 0-執(zhí)行成功   其它-執(zhí)行失敗 
  27. * 其它說明: 無 
  28. * 修改日期        版本號     修改人            修改內(nèi)容 
  29. * --------------------------------------------------------------------- 
  30. * 20160316        V1.0     Zhou Zhaoxiong        創(chuàng)建 
  31. ***********************************************************************/ 
  32. INT32 main() 
  33.     INT8   szInputStr[100] = {0}; 
  34.     UINT32 iPosFlag        = 0
  35.      
  36.     printf("Please input the string: \n"); 
  37.     scanf("%s", szInputStr); 
  38.     printf("InputStr=%s\n", szInputStr); 
  39.  
  40.     // 先判斷是否有中文字符 
  41.     for (iPosFlag = 0; iPosFlag < strlen(szInputStr); iPosFlag ++) 
  42.     { 
  43.         if (szInputStr[iPosFlag] < 0)     // 小于0則表示含有中文字符 
  44.         { 
  45.             printf("%s has Chinese character, please check!\n", szInputStr); 
  46.             return -1; 
  47.         } 
  48.     } 
  49.  
  50.     // 再調(diào)用函數(shù)獲取最長連續(xù)字符及其個數(shù) 
  51.     GetLongestContinChars(szInputStr); 
  52.  
  53.     return 0; 
  54.  
  55.  
  56. /********************************************************************** 
  57. * 功能描述: 獲取連續(xù)出現(xiàn)次數(shù)最多的字符及其連續(xù)出現(xiàn)次數(shù) 
  58. * 輸入?yún)?shù): pszInputStr-輸入字符串 
  59. * 輸出參數(shù): 無 
  60. * 返 回 值: 無 
  61. * 其它說明: 無 
  62. * 修改日期        版本號     修改人            修改內(nèi)容 
  63. * --------------------------------------------------------------------- 
  64. * 20160316        V1.0     Zhou Zhaoxiong        創(chuàng)建 
  65. ***********************************************************************/ 
  66. void GetLongestContinChars(INT8 *pszInputStr) 
  67.     INT8   cCompareChar       = '\0'
  68.     INT8   cLongestContinChar = '\0'
  69.     UINT32 iMaxLen            = 1
  70.     UINT32 iCharCount         = 1
  71.     UINT32 iPosFlag           = 0
  72.      
  73.     if (pszInputStr == NULL) 
  74.     { 
  75.         return; 
  76.     } 
  77.  
  78.     cCompareChar       = pszInputStr[0];  // 從***個字符開始比較 
  79.     cLongestContinChar = pszInputStr[0]; 
  80.  
  81.     for (iPosFlag = 1; iPosFlag < strlen(pszInputStr); iPosFlag ++)  
  82.     { 
  83.         if (pszInputStr[iPosFlag] == cCompareChar)  
  84.         { 
  85.             iCharCount ++;     // 對相同字符計數(shù)加1 
  86.         }  
  87.         else  
  88.         { 
  89.             iCharCount   = 1;                       // 字符不同時計數(shù)變?yōu)? 
  90.             cCompareChar = pszInputStr[iPosFlag];   // 重新比較新字符 
  91.         } 
  92.          
  93.         if (iCharCount > iMaxLen)   // 獲取連續(xù)出現(xiàn)次數(shù)最多的字符及其出現(xiàn)次數(shù) 
  94.         { 
  95.             iMaxLen            = iCharCount
  96.             cLongestContinChar = pszInputStr[iPosFlag]; 
  97.         } 
  98.     } 
  99.   
  100.     printf("連續(xù)出現(xiàn)次數(shù)最多的字符是: %c\n連續(xù)出現(xiàn)的次數(shù)是: %d\n", cLongestContinChar, iMaxLen); 

五、程序測試

我們將編寫好的程序“LongestContinChars.c”上傳到Linux機器,并使用“gcc -g -oLongestContinChars LongestContinChars.c”命令對該程序進行編譯,生成“LongestContinChars”文件。下面對程序進行詳細的測試。

1.輸入字符串為“ababbba”時,程序運行情況如下:

  1. Please input the string: 
  2. ababbba 
  3. InputStr=ababbba 
  4. 連續(xù)出現(xiàn)次數(shù)最多的字符是: b 
  5. 連續(xù)出現(xiàn)的次數(shù)是: 3 

2.輸入字符串為“123321”時,程序運行情況如下:

  1. Please input the string: 
  2. 123321 
  3. InputStr=123321 
  4. 連續(xù)出現(xiàn)次數(shù)最多的字符是: 3 
  5. 連續(xù)出現(xiàn)的次數(shù)是: 2 

3.輸入字符串為“!@##$%”時,程序運行情況如下:

  1. Please input the string: 
  2. !@##$% 
  3. InputStr=!@##$% 
  4. 連續(xù)出現(xiàn)次數(shù)最多的字符是: # 
  5. 連續(xù)出現(xiàn)的次數(shù)是: 2 

4.輸入字符串為“abcdef”時,程序運行情況如下:

  1. Please input the string: 
  2. abcdef 
  3. InputStr=abcdef 
  4. 連續(xù)出現(xiàn)次數(shù)最多的字符是: a 
  5. 連續(xù)出現(xiàn)的次數(shù)是: 1  

5.輸入字符串為“我們123”時,程序運行情況如下:

  1. Please input the string: 
  2. 我們123 
  3. InputStr=我們123 
  4. 我們123 has Chinese character, please check! 

六、需求擴展

基于本文中的需求和程序,我們可考慮對需求進行以下擴展:

1.不區(qū)分字母的大小寫,即如果輸入的字符串為“AAAaaa”,那么程序輸出最長連續(xù)字符為A或a,出現(xiàn)次數(shù)為6。

2.不限制字符串中不能出現(xiàn)中文字符,即如果輸入的字符串為“窩窩頭123”,那么程序輸出最長連續(xù)字符為窩,出現(xiàn)次數(shù)為2。

【本文是51CTO專欄作者周兆熊的原創(chuàng)文章,作者微信公眾號:周氏邏輯(logiczhou)】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2016-12-30 13:32:24

字符串算法代碼

2016-12-29 15:58:00

字符串子串算法

2016-12-30 13:16:51

字符串算法代碼

2016-12-29 17:14:41

回文串算法代碼

2016-12-30 13:37:50

字符串算法代碼

2016-12-29 16:25:32

字符串算法代碼

2023-02-26 22:33:32

字符串排列算法

2009-08-11 10:26:49

C#算法C#字符串反轉(zhuǎn)

2021-09-02 09:22:13

算法無重復(fù)字符

2013-05-06 10:54:08

字符串字符串匹配KMP算法

2023-12-15 10:27:01

暴力匹配算法Python字符串

2021-09-03 09:41:36

字符串時間復(fù)雜度

2023-04-11 08:54:57

字符串匹配算法

2013-05-06 10:49:21

Boyer-Moore算法字符串匹配

2021-09-10 08:31:54

翻轉(zhuǎn)字符串單詞

2021-11-19 09:00:24

LeetCode字符串算法

2010-11-26 09:51:54

MySQL字符串

2024-07-03 11:23:14

2011-04-11 17:08:16

階乘算法C++

2021-12-21 11:39:01

數(shù)據(jù)結(jié)構(gòu)算法同構(gòu)字符串
點贊
收藏

51CTO技術(shù)棧公眾號