题目
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/301583ed3c3d42fc5b9d294cdaf6ae2b.png)
思路
- 总体而言,因为不确定输入字符串的个数,所以用getline输入一行中所有字符串再进行遍历讨论;
- 对于解压:需要识别字符串中的数字,并输出n个后一位的字母。问题在于数字不能确定是几位。若默认最多出现两位数字,则有两个测试点会出错。
解决办法是通过新建字符串ss,当出现数字则加入ss中,再利用stoi函数转为整型输出。 - 对于压缩:用一个字符记录前一位,每次出现的与前一位相同时cnt计数,当不同时再由cnt的大小来进行判断输出。
AC代码
#include<bits/stdc++.h>
using namespace std;
int main(){
char z; cin>>z;
string s;
getchar();
getline(cin,s);
int len=s.length();
if(z=='C'){
int cnt=1;
char pre = s[0];
for(int i=1;i<len;i++){
if(s[i]==pre) cnt++;
else {
if(cnt>=2) cout<<cnt;
cnt=1;
cout<<pre;
pre=s[i];
}
}
if(cnt>=2) cout<<cnt;
cout<<pre;
}
else if(z == 'D'){
int n;
string ss;
for(int i=0;i<len;i++){
if(s[i]>='0'&&s[i]<='9'){
ss +=s[i];
}
else {
if(ss.length()>=1){
n = stoi(ss);
for(int j=0;j<n;j++) cout<<s[i];
n=1;
ss="";
}
else cout<<s[i];
}
}
}
return 0;
}