问题描述:小明有一串很长的英文,可能包含大写和小写字母。在这串字母中,有很多字母是连续且重复的。小明想了一个将这串字母表达的很短的办法。将连续的几个相同的字母写成“字母+出现次数”的形式。例如:连续的5个a,即aaaaa可以简写成a5(也可以简写成a4a、aa3a等)。对于这串字母:HHHellllloo,小明可以简写成H3el5o2.为了方便表达,小明不会将超过9个连续相同的字母写成简写的形式。现在给出简写后的字符串,请帮助小明将其还原成原来的字符串。
分析:本题可以采用模拟法求解,将每个元素都遍历一遍即可,分为以下两种情况:
1.若当前元素是字符,且下一个元素是数字,则需要循环输出当前字符,循环输出的次数就是数字的值。
2.若当前元素和下一个元素都是字符,则将这个字符输出一遍。
规定:原来的字符串长度不超过100
C++程序:
#include<bits/stdc++.h>
#include<string.h>
using namespace std;
int main()
{char s[101];cin>>s;int length;length=strlen(s);for(int i=0;i<length;i++){if(s[i+1]>'1'&&s[i+1]<='9')//若当前元素的下一个元素是数字{for(char j='1';j<=s[i+1];j++){cout<<s[i];}i++;//已知下一个元素是数字,直接跳过}else{cout<<s[i];//若下一个元素是字符,则将这个字符输出一遍。}}return 0;
}
C程序:
#include<stdio.h>
#include<string.h>
#define size 101//这可以直接更改字符长度
int main()
{int length;char arr[size];gets(arr);length = strlen(arr);for (int i = 0; i <length; i++){if (arr[i + 1] > '1' && arr[i + 1] <='9'){for (char j = '1'; j <= arr[i + 1]; j++){printf("%c", arr[i]);}i++;}else{printf("%c", arr[i]);}}return 0;}