大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓官劼的博客
本文原创为亓官劼,请大家支持原创,部分平台一直在盗取博主的文章!!!
博主目前仅在CSDN中写博客,唯一博客更新的地址为:亓官劼的博客
试题 G: 解码
时间限制: 1.0s 内存限制: 256.0MB 本题总分:20 分
【问题描述】
小明有一串很长的英文字母,可能包含大写和小写。
在这串字母中,有很多连续的是重复的。小明想了一个办法将这串字母表
达得更短:将连续的几个相同字母写成字母 + 出现次数的形式。
例如,连续的 5 个 a,即 aaaaa,小明可以简写成 a5(也可能简写成 a4a、
aa3a 等)。对于这个例子:HHHellllloo,小明可以简写成 H3el5o2。为了方便表
达,小明不会将连续的超过 9 个相同的字符写成简写的形式。
现在给出简写后的字符串,请帮助小明还原成原来的串。
【输入格式】
输入一行包含一个字符串。
【输出格式】
输出一个字符串,表示还原后的串。
【样例输入】
H3el5o2
【样例输出】
HHHellllloo
【评测用例规模与约定】
对于所有评测用例,字符串由大小写英文字母和数字组成,长度不超过
100。
请注意原来的串长度可能超过 100。
试题G 题解
#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
using namespace std;
int main(){
string a;
getline(cin,a);
int len = a.length();
string re = "";
bool flag = false;
for(int i = 0 ; i < len;i++){
if(a[i] < '2' || a[i] > '9'){
re = re + a[i];
flag = true;
} else{
// 前一个为非2-9,且这次为2-9数字
if(flag){
int num = int(a[i] - '0') - 1;
for (int j = 0; j < num; ++j) {
re = re + a[i-1];
}
flag = false;
} else{
re = re + a[i];
}
}
}
cout<<re;
return 0;
}