分析
思路很巧妙~
柳神分析:
1 解压时,cnt初始值为1,若遇到数字则将字符串数字转化为int型数字cnt,之后输出cnt次当前字母。
2 压缩时,用pre保存前一个字母,当当前字母与pre相同时,cnt++;否则输出cnt(cnt>=2时才需输出cnt)和pre,然后令pre=当前字母。最后别忘记结尾处理:当cnt>=2时输出cnt,然后输出pre
解压这样写只能输出个位数的数字,而超过9的就不好使了…
for(int i=0; i<s.length(); i++){
// cout<<s[i]<<"?";
if(s[i]>='0'&&s[i]<='9'){
for(int j=0;j<s[i]-'0';j++)
cout<<s[i+1];
i++;
}else cout<<s[i];
}
}
题解
#include <bits/stdc++.h>
using namespace std;
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("1.txt", "r", stdin);
#endif
char c;
int cnt=1;
cin>>c;
getchar();
string s,num;
getline(cin,s);
if(c=='C')
{
char cur=s[0];
for(int i=1; i<s.length(); i++)
{
if(s[i]==cur) cnt++;
else{
if(cnt>=2) cout<<cnt;
cout<<cur;
cur=s[i];
cnt=1;
}
}
if(cnt>=2) cout<<cnt;
cout<<cur;
}
else{
for(int i=0; i<s.length(); i++){
// cout<<s[i]<<"?";
if(s[i]>='0'&&s[i]<='9'){
num+=s[i];
}else{
if(num.size()>0) cnt=stoi(num);
while(cnt--) cout<<s[i];
cnt=1;
num="";
}
}
}
return 0;
}