文字壓縮有很多種方法,這裡我們只考慮最簡單的一種:把由相同字元組成的乙個連續的片段用這個字元和片段中含有這個字元的個數來表示。例如 ccccc 就用 5c 來表示。如果字元沒有重複,就原樣輸出。例如 aba 壓縮後仍然是 aba。
解壓方法就是反過來,把形如 5c 這樣的表示恢復為 ccccc。
本題需要你根據壓縮或解壓的要求,對給定字串進行處理。這裡我們簡單地假設原始字串是完全由英文本母和空格組成的非空字串。
輸入格式:
輸入第一行給出乙個字元,如果是 c 就表示下面的字串需要被壓縮;如果是 d 就表示下面的字串需要被解壓。第二行給出需要被壓縮或解壓的不超過 1000 個字元的字串,以回車結尾。題目保證字元重複個數在整型範圍內,且輸出檔案不超過 1mb。
輸出格式:
根據要求壓縮或解壓字串,並在一行中輸出結果。
輸入樣例 1:
cttttthhiiiis isssss a tesssst caaaa as
輸出樣例 1:
5t2h4is i5s a3 te4st ca3a as
輸入樣例 2:
d5t2h4is i5s a3 te4st ca3a as10z
輸出樣例 2:
ttttthhiiiis isssss a tesssst caaaa aszzzzzzzzzz
#include
#include
#include
using
namespace std;
intmain()
else}}
if(c ==
'd')
tmp.
clear()
; i = i +1;
if(i > s.
size()
)break;}
else}}
return0;
}
這個題總體來說比較簡單
需要注意的地方只有以下幾個:
1.cin,getchar(),getline(),cin.ignore()
cin >> c;
string s, s1;
getchar()
;getline
(cin, s1)
;
cin可以連續從鍵盤讀取想要的資料,以空格、tab或換行作為分隔符,cin輸入c以後輸入enter
getchar()函式從輸入緩衝區中讀取乙個位元組,僅僅讀乙個,此處getchar()是為了獲取enter,如果不獲取enter,getline()會因為緩衝區的enter停止。getchar所獲取的enter是乙個臨時變數,用一次會free
cin.ignore(),有時候你只想取緩衝區的一部分,而捨棄另一部分,這是就可以使用
cin.ignore(int intexp, char chexp);
其中intexp 是乙個整型表示式,也可以是乙個整型數值,這個數值表示在一行中忽略的字元的最大數目,比如說intexp=100;還有乙個引數chexp,是乙個字元表示式。表示如果遇到乙個字元值等於chexp,那麼就停止ignore(),如果ignore100個字元之後還沒遇到值等於chexp的字元,那也得停止ignore(),所以100是ignore()所忽略的最大字元數。
getline()輸入一行,以enter結束
2.isdigit()函式,判斷字元是不是數字,cctype宣告
3.tmp用於兩位數,輸出字元
tmp.
push_back
(s[i]
);
5t2h4is i5s a3 te4st ca3a as10z 解決10z的問題
tmp.
clear()
;
最後clear為空串
4.防止越界問題
i = i +1;
if(i > s.
size()
)break
;
PAT1078 字串壓縮與解壓 (20 分)
題目 思路 分成兩類,解壓和被解壓。解壓的時候字串中只有字母和空格,只要設定乙個加法器數一數相鄰相同的就好了。被解壓時字串中有字母 空格 數字。特殊點在於數字,設定乙個加法器,將該數字從string轉化成int就好了,如果該加法器數字不變依然為零的話就設定為一。再來一重迴圈輸出數字後面的字母或空格就...
PAT 1078 字串壓縮與解壓 20分
1078 字串壓縮與解壓 20分 文字壓縮有很多種方法,這裡我們只考慮最簡單的一種 把由相同字元組成的乙個連續的片段用這個字元和片段中含有這個字元的個數來表示。例如 ccccc 就用 5c 來表示。如果字元沒有重複,就原樣輸出。例如 aba 壓縮後仍然是 aba。解壓方法就是反過來,把形如 5c 這...
PAT 乙級 1078 字串壓縮與解壓
文字壓縮有很多種方法,這裡我們只考慮最簡單的一種 把由相同字元組成的乙個連續的片段用這個字元和片段中含有這個字元的個數來表示。例如ccccc就用5c來表示。如果字元沒有重複,就原樣輸出。例如aba壓縮後仍然是aba。解壓方法就是反過來,把形如5c這樣的表示恢復為ccccc。本題需要你根據壓縮或解壓的...