P8706 [蓝桥杯 2020 省 AB1] 解码 ( 入门 ) 题解
题目传送门
思路:
有一个原串 \(t\)。
将原串 \(t\) 转换成简写字符串 \(s\) 的规则如下:
- 如果有连续的 \(2\sim9\) 个相同字母,那么可以将它改为字母+数字的格式。
- 如果是单独的字符,也就是与左右两边的字母都不相同,在简写字符串中一模一样。
所以,现在告诉我们简写字符串,要我们求出原串。
我们可以直接判断下一个字符是否为数字,如果为数字,那么输出数字个当前字符。
如果下一个字符为字母而且当前字符不为数字,那么直接输出当前字母。
Code:
#include <bits/stdc++.h>
using namespace std;
string s;
bool panduan(char a)//判断函数
{
if(a>='0' and a<='9')
{
return true;
}
if((a<='z' and a>='a') or (a<='Z' and a>='A'))
{
return false;
}
}
int main()
{
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>s;
int len=s.size();
for(int i=0;i<len;i++)
{
if(panduan(s[i+1]))//如果下一个字符为整数就输出s[i+1]个s[i]
{
int p=s[i+1]-'0';
while(p--)
{
cout<<s[i];
}
}
else if(!panduan(s[i]))//如果下一个不是整数并且当前字符不是数字时直接输出自己
{
cout<<s[i];
}
}
return 0;
}