赞
踩
问题描述:小明有一串很长的英文,可能包含大写和小写字母。在这串字母中,有很多字母是连续且重复的。小明想了一个将这串字母表达的很短的办法。将连续的几个相同的字母写成“字母+出现次数”的形式。例如:连续的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;
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。