成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

【字符串處理算法】回文判斷的算法設計及C代碼實現

開發 開發工具 算法
今天主要講講回文判斷的算法設計及C代碼實現。

一、需求描述

輸入一個字符串,編寫程序判斷這個字符串是否是回文串。

為了便于說明,設定輸入的字符串分為中文字符串和非中文字符串兩種。其中,中文字符串中僅包含中文字符,非中文字符串中不包含中文字符。

所謂回文串,是指正讀和反讀都一樣的字符串。下面舉幾個例子予以說明:

1.“level”是一個非中文字符的回文串,因為正讀和反讀都是“level”。

2.“Good”不是一個非中文字符的回文串。

3.“我愛我”是一個中文字符的回文串,因為正讀和反讀都是“我愛我”。

4.“我愛你”不是一個中文字符的回文串。

字符串

二、算法設計

對于非中文字符的回文串的判斷比較簡單,我們只要以字符串的中間為原點,比較前后對應的字符是否相等就可以了;但對于中文字符的回文串的判斷要復雜一點,因為一個中文字符占兩個字節,我們不能采用非中文字符的回文串的判斷方法,而是應該先單獨獲取每個中文字符,然后再比較一前一后兩個字符是否相等。

程序的總體流程如圖1所示。

圖1 程序的總體流程

三、特殊流程考慮

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

1.如果輸入的字符串中只有一個字符,那么程序直接返回,不執行后續流程,因為回文串中至少有兩個及以上的字符。

2.如果輸入的中文串中含有非中文字符,或者是輸入的非中文串中含有中文字符,那么程序直接返回,不執行后續流程。

四、程序代碼

 
  1. /********************************************************************** 
  2. * 版權所有 (C)2016, Zhou Zhaoxiong。 
  3. * 文件名稱: PalindromicString.c 
  4. * 文件標識: 無 
  5. * 內容摘要: 回文判斷 
  6. * 其它說明: 形如madam, php, 2992, 1234321這樣的串就是回文串 
  7. * 當前版本: V1.0 
  8. * 作    者: Zhou Zhaoxiong 
  9. * 完成日期: 20160222 
  10. **********************************************************************/ 
  11. #include <stdio.h> 
  12.  
  13.  
  14. // 重新定義數據類型 
  15. typedef signed   char  INT8; 
  16. typedef          int   INT32; 
  17. typedef unsigned int   UINT32; 
  18.  
  19. // 全局變量聲明, 用于存放漢字, ***支持100個漢字 
  20. INT8   gszStrCharArray[101][5] = {0};   
  21. UINT32 giCharNum               = 0
  22.  
  23.  
  24. // 函數聲明 
  25. void JudgePalindromicString(INT8 *pszInputStr, UINT32 iInputStrLen, UINT32 iStrType); 
  26. void GetChineseChars(INT8 *pszInputStr); 
  27. INT32 JudgeStrFormat(INT8 *pszInputStr, UINT32 iStrType); 
  28.  
  29.  
  30. /********************************************************************** 
  31. * 功能描述: 主函數 
  32. * 輸入參數: 無 
  33. * 輸出參數: 無 
  34. * 返 回 值: 0-執行成功   其它-執行失敗 
  35. * 其它說明: 無 
  36. * 修改日期        版本號     修改人            修改內容 
  37. * --------------------------------------------------------------------- 
  38. * 20160222        V1.0     Zhou Zhaoxiong      創建 
  39. ***********************************************************************/ 
  40. INT32 main() 
  41.     UINT32 iStrType        = 0
  42.     INT32  iRetVal         = 0
  43.     INT8   szInputStr[100] = {0}; 
  44.  
  45.     printf("Please input the string type(1:中文字符串,2:非中文字符串): \n"); 
  46.     scanf("%d", &iStrType); 
  47.      
  48.     printf("Please input the string: \n"); 
  49.     scanf("%s", szInputStr); 
  50.  
  51.     // 判斷輸入的字符串是中文字符串或者是非中文字符串 
  52.     iRetVal = JudgeStrFormat(szInputStr, iStrType); 
  53.     if (iRetVal != 0) 
  54.     { 
  55.         return -1; 
  56.     } 
  57.  
  58.     if (iStrType == 1)     // 如果輸入的是中文串, 則先獲取各個中文字符 
  59.     { 
  60.         GetChineseChars(szInputStr); 
  61.  
  62.         if (giCharNum <= 1)    // 只輸入了一個字符, 直接返回 
  63.         { 
  64.             printf("%s has only one character, please check!\n", szInputStr); 
  65.             return -1;  
  66.         } 
  67.     } 
  68.     else if (iStrType == 2) 
  69.     { 
  70.         if (strlen(szInputStr) <= 1)  // 只輸入了一個字符, 直接返回 
  71.         { 
  72.             printf("%s has only one character, please check!\n", szInputStr); 
  73.             return -1;  
  74.         } 
  75.     } 
  76.   
  77.     // 判斷輸入的字符串是否為回文串 
  78.     JudgePalindromicString(szInputStr, strlen(szInputStr), iStrType); 
  79.  
  80.     return 0;             
  81.  
  82.  
  83. /********************************************************************** 
  84. * 功能描述:判斷輸入的字符串是否為回文串 
  85. * 輸入參數:pszInputStr-輸入的字符串 
  86.             iInputStrLen-輸入的字符串的長度 
  87.             iStrType-輸入的字符串的類型 
  88. * 輸出參數:無 
  89. * 返 回 值:無 
  90. * 其它說明:無 
  91. * 修改日期       版本號        修改人          修改內容 
  92. * ------------------------------------------------------------------- 
  93. * 20160222       V1.0      Zhou Zhaoxiong      創建 
  94. ***********************************************************************/ 
  95. void JudgePalindromicString(INT8 *pszInputStr, UINT32 iInputStrLen, UINT32 iStrType) 
  96.     UINT32 iPosFlag   = 0
  97.  
  98.     if (NULL == pszInputStr) 
  99.     { 
  100.         return; 
  101.     } 
  102.  
  103.     if (iStrType == 1)     // 中文字符串 
  104.     { 
  105.         for (iPosFlag = 0; iPosFlag < giCharNum/2; iPosFlag ++) 
  106.         { 
  107.             if (strcmp(gszStrCharArray[iPosFlag], gszStrCharArray[giCharNum-1-iPosFlag]) != 0)   // 有對應字符不相等 
  108.             { 
  109.                 printf("%s is not a palindromic string!\n", pszInputStr); 
  110.                 return; 
  111.             } 
  112.         } 
  113.     } 
  114.  
  115.     if (iStrType == 2)     // 非中文字符串 
  116.     { 
  117.         // 從中間分開, 一前一后兩個字符互相比較, 如果全部對應相等, 則是回文串 
  118.         for (iPosFlag = 0; iPosFlag < iInputStrLen/2; iPosFlag ++) 
  119.         { 
  120.             if (pszInputStr[iPosFlag] != pszInputStr[iInputStrLen-1-iPosFlag])   // 有對應字符不相等 
  121.             { 
  122.                 printf("%s is not a palindromic string!\n", pszInputStr); 
  123.                 return; 
  124.             } 
  125.         } 
  126.     } 
  127.  
  128.     printf("%s is a palindromic string!\n", pszInputStr); 
  129.  
  130.     return; 
  131.  
  132.  
  133. /********************************************************************** 
  134. * 功能描述:獲取輸入的字符串中的每個中文字符 
  135. * 輸入參數:pszInputStr-輸入的字符串 
  136.             iInputStrLen-輸入的字符串的長度 
  137. * 輸出參數:無 
  138. * 返 回 值:無 
  139. * 其它說明:無 
  140. * 修改日期       版本號        修改人          修改內容 
  141. * ------------------------------------------------------------------- 
  142. * 20160222       V1.0      Zhou Zhaoxiong      創建 
  143. ***********************************************************************/ 
  144. void GetChineseChars(INT8 *pszInputStr) 
  145.     UINT32 iPosFlag = 0
  146.      
  147.     if (NULL == pszInputStr) 
  148.     { 
  149.         return; 
  150.     } 
  151.  
  152.     memset(gszStrCharArray, 0x00, sizeof(gszStrCharArray)); 
  153.     giCharNum = 0
  154.      
  155.     while (iPosFlag < strlen(pszInputStr)) 
  156.     { 
  157.         snprintf(gszStrCharArray[giCharNum], sizeof(gszStrCharArray[giCharNum])-1, "%c%c", pszInputStr[iPosFlag], pszInputStr[iPosFlag+1]); 
  158.  
  159.         iPosFlagiPosFlag = iPosFlag + 2;    // 每個中文字符占兩個字節 
  160.          
  161.         giCharNum ++; 
  162.     } 
  163.  
  164.  
  165. /********************************************************************** 
  166. * 功能描述:判斷輸入的字符串的格式是否正確 
  167. * 輸入參數:pszInputStr-輸入的字符串 
  168.             iStrType-輸入的字符串的類型 
  169. * 輸出參數:無 
  170. * 返 回 值:0-格式正確 其它-格式不正確 
  171. * 其它說明:無 
  172. * 修改日期       版本號        修改人          修改內容 
  173. * ------------------------------------------------------------------- 
  174. * 20160222       V1.0      Zhou Zhaoxiong      創建 
  175. ***********************************************************************/ 
  176. INT32 JudgeStrFormat(INT8 *pszInputStr, UINT32 iStrType) 
  177.     UINT32 iPosFlag  = 0
  178.      
  179.     if (NULL == pszInputStr) 
  180.     { 
  181.         return -1; 
  182.     } 
  183.  
  184.     if (iStrType == 1)    // 先判斷中文字符串 
  185.     { 
  186.         for (iPosFlag = 0; iPosFlag < strlen(pszInputStr); iPosFlag ++) 
  187.         { 
  188.             if (pszInputStr[iPosFlag] >= 0)     // 不小于0則表示含有非中文字符 
  189.             { 
  190.                 printf("%s has non-Chinese character, please check!\n", pszInputStr); 
  191.                 return -2; 
  192.             } 
  193.         } 
  194.     } 
  195.     else if (iStrType == 2)    // 再判斷非中文字符串 
  196.     { 
  197.         for (iPosFlag = 0; iPosFlag < strlen(pszInputStr); iPosFlag ++) 
  198.         { 
  199.             if (pszInputStr[iPosFlag] < 0)     // 小于0則表示含有中文字符 
  200.             { 
  201.                 printf("%s has Chinese character, please check!\n", pszInputStr); 
  202.                 return -3; 
  203.             } 
  204.         } 
  205.     } 
  206.     else 
  207.     { 
  208.         printf("Please input the right string type!\n"); 
  209.         return -4;  
  210.     } 
  211.  
  212.     return 0; 

五、程序測試

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

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

  1. Please input the string type(1:中文字符串,2:非中文字符串): 
  2. Please input the string: 
  3. 人上人 
  4. 人上人 is a palindromic string! 

2.輸入中文字符串為“我是誰”時,程序運行情況如下:

  1. Please input the string type(1:中文字符串,2:非中文字符串): 
  2. Please input the string: 
  3. 我是誰 
  4. 我是誰 is not a palindromic string! 

3.輸入非中文字符串為“level”時,程序運行情況如下:

  1. Please input the string type(1:中文字符串,2:非中文字符串): 
  2. Please input the string: 
  3. level 
  4. level is a palindromic string! 

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

  1. Please input the string type(1:中文字符串,2:非中文字符串): 
  2. Please input the string: 
  3. good 
  4. good is not a palindromic string! 

5.輸入字符串為“你好good”時,程序運行情況如下:

  1. Please input the string type(1:中文字符串,2:非中文字符串): 
  2. Please input the string: 
  3. 你好good 
  4. 你好good has non-Chinese character, pleasecheck! 

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

  1. Please input the string type(1:中文字符串,2:非中文字符串): 
  2. Please input the string: 
  3. good好 
  4. good好 has Chinese character, pleasecheck! 

7.輸入字符串類型非1或2時,程序運行情況如下:

  1. Please input the string type(1:中文字符串,2:非中文字符串): 
  2. Please input the string: 
  3. goog 
  4. Please input the right string type! 

可見,對于上面考慮到的幾種特殊情況,程序均能做出正確的處理。

六、需求擴展

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

1.不限制輸入的字符串中只能是中文串或者非中文串,可以是中文字符和非中文字符的混合串。

2.當輸入的字符串中是非中文串時,要求該字符串的字符個數為偶數。即要求形如“goog”這樣的字符串為回文串,而像“level” 這樣的字符串不為回文串。

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

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

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2016-12-30 13:32:24

字符串算法代碼

2016-12-30 13:16:51

字符串算法代碼

2016-12-29 15:58:00

字符串子串算法

2016-12-29 17:07:59

字符算法代碼

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#字符串反轉

2013-05-06 10:54:08

字符串字符串匹配KMP算法

2023-12-15 10:27:01

暴力匹配算法Python字符串

2021-11-12 09:44:03

字符串算法復雜度

2021-09-03 09:41:36

字符串時間復雜度

2023-04-11 08:54:57

字符串匹配算法

2013-05-06 10:49:21

Boyer-Moore算法字符串匹配

2021-09-10 08:31:54

翻轉字符串單詞

2023-08-29 15:32:57

深度學習人工智能

2018-07-27 08:39:44

負載均衡算法實現

2024-07-03 11:23:14

2009-09-02 15:53:27

C#判斷字符串應用

2010-11-26 09:51:54

MySQL字符串
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国内成人免费视频 | 国户精品久久久久久久久久久不卡 | 午夜精品久久久久久久久久久久 | 婷婷久久综合 | 亚洲一区| 一区二区三区四区电影视频在线观看 | 国产精品一区二区福利视频 | 国产精品一区二区久久 | 国产一区二区三区在线 | 久久精品国产亚洲 | 久久er99热精品一区二区 | 色婷婷久久久久swag精品 | av激情影院 | 成人免费观看男女羞羞视频 | 一区二区三区精品视频 | 欧美一区二区三区在线 | 久久综合成人精品亚洲另类欧美 | 中文字幕欧美一区 | 高清国产午夜精品久久久久久 | 欧美一区不卡 | aa级毛片毛片免费观看久 | 九九九精品视频 | 老司机精品福利视频 | 国产成人av电影 | 特一级毛片 | 成人国产网站 | 97高清国语自产拍 | 久久久国产精品一区 | 成年人在线视频 | 欧美在线a | 久久在线| 欧美一级二级在线观看 | 久久精品一二三影院 | 欧美日韩在线一区 | 中文字幕成人在线 | 亚洲天堂av在线 | 精品综合在线 | 国产在线观看一区二区三区 | 日本三级播放 | www.99久久.com| av天天看 |