PAT 1078. 字符串壓縮與解壓 -开发者知识库

PAT 1078. 字符串壓縮與解壓 -开发者知识库,第1张

文本壓縮有很多種方法,這里我們只考慮最簡單的一種:把由相同字符組成的一個連續的片段用這個字符和片段中含有這個字符的個數來表示。例如 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        
思路:https://www.liuchuo.net/archives/4198    
 
#include <iostream>
using namespace std;
int main()
{
	char t;
	cin>>t;
	getchar();
	string s,num;
	getline(cin,s);
	int cnt=1;
	if(t=='D')
	{
		for(int i=0;i<s.length();i  )
		{
			if(s[i]>='0'&&s[i]<='9')
			{
				num =s[i];
			}else {
				if(num.length()>0) cnt=stoi(num);
				while(cnt--) cout<<s[i];
				cnt=1;
				num="";
			}
		}
	}else if(s.length()!=0)
	{
		char pre=s[0];
		for(int i=1;i<s.length();i  )
		{
			if(s[i]==pre)
			cnt  ;
			else {
				if(cnt>=2) cout<<cnt;
				cout<<pre;
				cnt=1;
				pre=s[i];
			}
		}if(cnt>=2) cout<<cnt;
		cout<<pre;
	}return 0;
}
//dev 怎么不支持 stoi 。。

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复