题解
逻辑 |
---|
我其实不怎么分得清什么是逻辑题,只是感觉比较难想的就是 |
我看柳神把这个题归为逻辑题,我。。。嗯就是吧,我做这个的时候比较轻松 |
其实这两天做题都挺轻松,可能是做的量上来了,感觉也跟着来了,今天做的题,都是一下过,没有改bug |
题解: |
对于字符串的遍历,我喜欢while(!s.empty()) |
就是一直遍历到空,每次都删除第一个,每次都看第一个,这样就不需要考虑下标的变化,我喜欢这样 |
1.压缩:每次都字符有几个,如果是1个就直接输出,2个以上就先输出个数再输出字符 |
2.解压:判断当前字符是否为数字,如果是,就一直往下走,直到把所有的数字遍历完(我一开始没想到,原来不只是一位数),然后获取到数字,while循环输出,如果没有获取到数字,就直接输出 |
Code
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
char N;
cin >> N;
string s;
getchar();
getline(cin, s);
if (N == 'C')
{
char c;
while (!s.empty())
{
int cnt = 0;
c = s.front();
while (s.front() == c && !s.empty())
{
s.erase(0, 1);
cnt++;
}
if (cnt == 1)
cout << c;
else
cout << cnt << c;
}
}
else
{
int t = 0;
while (!s.empty())
{
if (isdigit(s.front()))
{
string st;
while (isdigit(s.front()) && !s.empty())
{
st.push_back(s.front());
s.erase(0, 1);
}
t = stoi(st);
while (t--)
{
cout << s[0];
}
t = 0;
s.erase(0, 1);
}
else
{
cout << s.front();
s.erase(0, 1);
}
}
}
return 0;
}