#include <iostream>
#include <string>
using namespace std;
int main() {
char a;
int j;
string s;
cin>>a;
getchar();
getline(cin,s);
if(a=='C'){
for(int i=0;i<s.length();i=j){
int cnt=0;
for(j=i;j<s.length()&& s[j] == s[i];j++){ //j记录重复字符到哪
cnt++; //cnt记录重复次数
}
if(cnt>1) {cout<<cnt;}
cout<<s[i];
}
}
if(a=='D'){
for(int i=0;i<s.length();i=j){ //j标记下一次输出处理的开端位置
j=i;
string temp;
if(isdigit(s[i])){ //是数字则表明要进行解压处理
while(isdigit(s[j])){ //重复次数的数字可能占不止一个字符,j一直记录到不是数字字符为止
temp+=s[j++];
}
for(int k=0;k<stoi(temp);k++){ //输出temp个s[j]的字符
cout<<s[j];
}
j++; //数字+字符组合解压处理完成,j指向下一个字符
}else cout<<s[j++]; //单个字符直接输出
}
}
system("pause");
return 0;
}
PAT 1078 字符串压缩与解压 (20 分) for循环妙用
最新推荐文章于 2024-07-18 23:31:00 发布