字串壓縮

2021-09-26 11:17:28 字數 1340 閱讀 4112

字串壓縮,輸入字串只包括  a-z字母及結束標誌,請編寫函式實現對連續出現字元進行壓縮.

例如:壓縮前:

str="aaabbcdddd";

壓縮後:

str="3a2bc4d";

看到這個題,我們可以想到的是從前到後遍歷字串,設定計數器,對每個出現字母使用cout進行計數,但要注意每次計數完乙個字元都要進行cout重置還有cout應該設定初值時從1開始

按以上思路我們還有兩種思路,

第一種通過對輸出的控制 我們可以一邊計數一邊進行字元輸出,不改變原字串

第二種類似於之前的雙指標(前後指標) ,進行控制,改變原字串.

//第一種

#define _crt_secure_no_warnings 1

#include #include #include void compassstring(char *arr, int len)

else

printf("%c", arr[i]);

cout = 1;

} }}int main()

//第二種

#define _crt_secure_no_warnings 1

#include #include #include void compress(char*arr)

else

arr[j++] = arr[i];

cout = 1;

} i++;

} arr[j] = '\0';

}int main()

{ char arr = "ddacccfffff";

compress(arr);

printf("%s", arr);

system("pause");

return 0;

對比上面兩種做法就可以看到不同,即優缺點.

不同:  由於第一種採用邊計數邊列印方式,因此直接就在它本身函式內部列印,第二種方法要改變字串所以要進行外部重新列印.   還有因外第一種沒改變字串所以主函式進行設定str時使用char*str="aabccc"或者char str="aabccc"而第二種進行了字串的改變,因此只能採用char str="aabccc"設定.

優缺點: 第二種方法裡通過對計數器cout    arr[j++] = cout + '0';   就可以看出來兩種方法的區別.第二種因為計數要通過連續字元計數所以cout值只能從 '0'  - '9' .這也是它的弊端,而第一種不會受字元出現次數影響,直接進行輸出即可.

字串 字串壓縮

標題 字串壓縮 類別字串處理 時間限制 1s記憶體限制 1000kb 問題描述 有一種簡單的字串壓縮演算法,對於字串中連續出現的同乙個英文本元,用該字元加上連續出現的次數來表示 連續出現次數小於3時不壓縮 例如,字串aaaaabbbabaaaaaaaaaaaaabbbb可壓縮為a5b3aba13b4...

字串壓縮

include using namespace std 題目描述 通過鍵盤輸入一串小寫字母 a z 組成的字串。請編寫乙個字串壓縮程式,將字串中連續出席的重複字母進行壓縮,並輸出壓縮後的字串。壓縮規則 1.僅壓縮連續重複出現的字元。比如字串 abcbc 由於無連續重複字元,壓縮後的字串還是 abcb...

字串壓縮

通過鍵盤輸入一串小寫字母 a z 組成的字串。請編寫乙個字串壓縮程式,將字串中連續出席的重複字母進行壓縮,並輸出壓縮後的字串。壓縮規則 1 僅壓縮連續重複出現的字元。比如字串 abcbc 由於無連續重複字元,壓縮後的字串還是 abcbc 2 壓縮欄位的格式為 字元重複的次數 字元 例如 字串 yyy...