字串壓縮,輸入字串只包括 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...