字符串包含的算法設計及C代碼實現
一、需求描述
給定一個長字符串和一個短字符串,編寫程序判斷短字符串中的所有字符是否都在長字符串中。如果是,則長字符串包含短字符串;反之,不包含。
為了盡量包含大多數情況,字符串中可以包含大小寫英文字母、數字和各種標點符號,并且區分大小寫字母。
下面舉幾個例子予以說明:
1.如果長字符串是“ABCDE”,短字符串是“ADC”,那么短字符串中的所有字符都在長字符串中,即長字符串包含了短字符串。
2.如果長字符串是“ABCDE”,短字符串是“ADCF”,那么短字符串中不是所有字符都在長字符串中,即長字符串不包含了短字符串。
3.如果長字符串是“ABCDE”,短字符串是“AAB”,那么短字符串中的所有字符都在長字符串中,即長字符串包含了短字符串。
二、算法設計
我們都知道,就像人體是由一個個的細胞組成一樣,一個字符串是由一個個的字符組成。如果組成某個字符串的所有字符都在另一個字符串中,那么這個字符串就被另一個字符串包含。
因此,我們可以考慮先將兩個字符串中的所有字符都找出來,再判斷較短的字符串中的所有字符是否都出現在了較長的字符串中。如果是,那么兩個字符串是包含與被包含的關系;如果不是,那么兩個字符串則“形同陌路”。
程序的總體流程如圖1所示。
圖1 程序的總體流程
三、特殊流程考慮
在編寫程序的過程中,我們要對輸入的兩個字符串的長度及格式多做考慮,如:
1.如果輸入失誤,導致短字符串的長度大于了長字符串,那么程序直接返回,不進行后續處理。
2.不允許在輸入字符串的中間出現空格,如果出現了,只能把空格前面的內容作為輸入的字符串。
3.輸入字符串可以包含字母(區分大小寫)、數字、標點符號等字符。
4.為了方便程序處理,設定較長的字符串最長為500個字節,較短的字符串最長為100個字節。
四、程序代碼
五、程序測試
我們將編寫好的程序“StringContains.c”上傳到Linux機器,并使用“gcc -g -o StringContainsStringContains.c”命令對該程序進行編譯,生成“StringContains”文件。下面對程序進行詳細的測試。
1.輸入較長字符串為“ABCDF”、較短字符串為“AF”時,程序運行情況如下:
Please input the longer string:
ABCDF
LongerStr=ABCDF
Please input the shorter string:
AF
ShorterStr=AF
ABCDF contains AF!
2.輸入較長字符串為“AB”、較短字符串為“ABC”時,程序運行情況如下:
Please input the longer string:
AB
LongerStr=AB
Please input the shorter string:
ABC
ShorterStr=ABC
ABC is longer than AB, please check!
3.輸入較長字符串為“awe”、較短字符串為“rf”時,程序運行情況如下:
Please input the longer string:
awe
LongerStr=awe
Please input the shorter string:
rf
ShorterStr=rf
awe doesn't contain rf!
4.輸入較長字符串為“`11245”、較短字符串為“45”時,程序運行情況如下:
Please input the longer string:
`11245
LongerStr=`11245
Please input the shorter string:
45
ShorterStr=45
`11245 contains 45!
5.輸入較長字符串為“123”、較短字符串為“123 45”時,程序運行情況如下:
Please input the longer string:
123
LongerStr=123
Please input the shorter string:
123 45
ShorterStr=123
123 contains 123!
可見,對于上面考慮到的幾種特殊情況,程序均能做出正確的處理。
六、需求擴展
基于本文中的需求和程序,我們可考慮對需求進行以下擴展:
1.限制輸入的字符串中只能包含字母,如果包含了其它字符,則直接退出而不進行處理。
2.如果較短的字符串中的所有字符雖然都在較長的字符串中,但某個字符在較短的字符串中出現的次數大于了在較長的字符串中出現的次數,那么就認為較長的字符串不包含較短的字符串。