/**
* 1.解题思路:解压时,cnt初始值为1,若遇到数字则将字符串数字转化为int型数字cnt,之后输出cnt次当前字母。
* 压缩时,用pre保存前一个字母,当当前字母与pre相同时,cnt++;否则输出cnt(cnt>=2时才需输出cnt)
* 和pre,然后令pre=当前字母。最后别忘记结尾处理:当cnt>=2时输出cnt,然后输出pre
*
* 2.参考博客: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 {
//将字符串数字转化为int型数字cnt
if (num.length() > 0) cnt = stoi(num);
//如果是字母,则输出
while(cnt--) cout << s[i];
cnt = 1;
num = "";
}
}
} else if (s.length() != 0) {
//用pre保存前一个字母
char pre = s[0];
for (int i = 1; i < s.length(); i++) {
//当当前字母与pre相同时,cnt++
if (s[i] == pre) {
cnt++;
} else {
//否则输出cnt(cnt>=2时才需输出cnt)和pre
if (cnt >= 2) cout << cnt;
cout << pre;
cnt = 1;
//然后令pre=当前字母
pre = s[i];
}
}
//结尾处理
if (cnt >= 2) cout << cnt;
cout << pre;
}
return 0;
}
1078 字符串压缩与解压
最新推荐文章于 2020-03-12 10:25:04 发布