PAT-1078 字串壓縮與解壓
阿新 • • 發佈:2018-11-13
1078 字串壓縮與解壓 (20 分)
文字壓縮有很多種方法,這裡我們只考慮最簡單的一種:把由相同字元組成的一個連續的片段用這個字元和片段中含有這個字元的個數來表示。例如 ccccc
就用 5c
來表示。如果字元沒有重複,就原樣輸出。例如 aba
壓縮後仍然是 aba
。
解壓方法就是反過來,把形如 5c
這樣的表示恢復為 ccccc
。
本題需要你根據壓縮或解壓的要求,對給定字串進行處理。這裡我們簡單地假設原始字串是完全由英文字母和空格組成的非空字串。
輸入格式:
輸入第一行給出一個字元,如果是 C
就表示下面的字串需要被壓縮;如果是 D
就表示下面的字串需要被解壓。第二行給出需要被壓縮或解壓的不超過 1000 個字元的字串,以回車結尾。題目保證字元重複個數在整型範圍內,且輸出檔案不超過 1MB。
輸出格式:
根據要求壓縮或解壓字串,並在一行中輸出結果。
輸入樣例 1:
C
TTTTThhiiiis isssss a tesssst CAaaa as
輸出樣例 1:
5T2h4is i5s a3 te4st CA3a as
輸入樣例 2:
D
5T2h4is i5s a3 te4st CA3a as10Z
輸出樣例 2:
TTTTThhiiiis isssss a tesssst CAaaa asZZZZZZZZZZ
#include<iostream> #include<string> using namespace std; void chuli1() { string s; getline(cin,s); int l=s.length(); for(int i=0;i<l;i++) { int count=0; while(s[i]==s[i+1]) { i++; count++; } if(count!=0) { cout<<count+1; } cout<<s[i]; } } void chuli2() { string s; int sum=0; getline(cin,s); int l=s.length(); for(int i=0;i<l;i++) { sum=0; while(s[i]>='0'&&s[i]<='9') { sum=sum*10+s[i]-'0';//注意此處要減去‘0’得到數 i++; } if(sum>0) { for(int j=0;j<sum;j++) { cout<<s[i]; } } else { cout<<s[i]; } } } int main() { char a; cin>>a; getchar();//下面輸入用getline()的話,此處就要用getchar()吞掉回車 if(a=='C') { chuli1(); } if(a=='D') { chuli2(); } cout<<endl; return 0; }