题目传送门:https://pintia.cn/problem-sets/994805260223102976/exam/proble...
第五个测试点过不去,不知道什么问题:
#include<bits/stdc++.h>
using namespace std;
//压缩
void fun1(string s)
{
int cnt = 1; //算上自身所以是1
string ss;
//首先看一下相同的字母就count++;,这样count就存储了要压缩的字母的个数
for (int i = 0; i < s.size(); i++)
{
if (s[i] == s[i + 1])cnt++;
else
{
if (cnt == 1)ss += s[i]; //只有一个字符的话不要把数字加上,即1s,而是直接加s,即 s
else ss += to_string(cnt) + s[i]; //要压缩的字母个数+字母
cnt = 1; //重置
}
}
cout << ss<<endl;
}
//解压
void fun2(string s)
{
int index = 0;
string ss;
//解压的话我们需要看数字以及数字后面的字符
while (index < s.size())
{
if(isdigit(s[index])&&isdigit(s[index+1]))
{
int temp= (s[index] - '0') * 10 + (s[index + 1] - '0');
while (temp--)
{
if(index+2<s.size())
ss += s[index + 2];
}
index += 3;
}
else if (isdigit(s[index]))
{
int temp = s[index] - '0';
while (temp--)
{
if(index+1<s.size())
ss += s[index + 1];
}
index += 2;
}
else //字母
{
if(index<s.size())
{
ss += s[index];
index++;
}
}
}
cout << ss<<endl;
}
int main()
{
char c; cin >> c; getchar();
string s; getline(cin, s);
if (c == 'C')
fun1(s);
else if (c == 'D')
fun2(s);
return 0;
}
修正代码