https://pintia.cn/problem-sets/994805260223102976/problems/994805262018265088
压缩容易,解压难一点。解压的时候一个字符的重复个数可能是10以上,要对有数字和没数字的字符进行标记。
#include<iostream>
using namespace std;
int main() {
char ch;
string str, res;
cin >> ch;
getchar();
getline(cin, str);
if(ch=='C'){
int p=0, q=0;
while(q<str.size()+1){
if(str[p]==str[q])
q++;
else{
if(q-p>1){
res += to_string(q-p);
}
res += str[p];
p = q;
}
}
}else if(ch=='D'){
string num;
int n, flag = 0;
for(int i=0; i<str.size(); i++){
// 如果是数字
if(str[i]>='0' && str[i]<='9'){
num += str[i];
flag = 1;
}
// 如果是有数字的字符
if(!(str[i]>='0' && str[i]<='9') && flag == 1){
n = atoi(num.c_str());
for(int j=0; j<n-1; j++){
res += str[i];
}
flag = 0;
num = "";
}
// 如果是单个字符
if(!(str[i]>='0' && str[i]<='9') && flag == 0){
res += str[i];
}
}
}
cout << res << endl;
return 0;
}