Time Limit: 1 secs, Memory Limit: 32 MB
Description
Run-length encoding is a simple compression technique which compresses strings of letters by replacing repeated consecutive letters (called runs) by the number of occurrences of the letter, followed by that letter. For example, AAAABBBCDDE compresses to 4A3BC2DE. The number 1 may be omitted in runs consisting of a single letter, as with letters ‘C’ and ‘E’ in the previous example.
Any string consisting of uppercase letters where each letter is optionally preceded by a positive integer is called a properly encoded string.
Input
Input may contain many cases, each is a properly encoded string in one line.
Each string will contain between 0 and 50 characters (‘0’-‘9’, ‘A’-‘Z’), inclusive.
Each string will be a properly encoded string: all numbers contained will be positive integers with no leading zeros and each number will precede a letter.
Output
For each case, output the decoded string in one line. If the decoded string would be more than 50 characters long, return “TOO LONG” (without the quotes).
Sample Input
4A3BC2DE
1A1B1C1D1E
1A3A5A4BCCCC
50A
21Z13S9A8M
Sample Output
AAAABBBCDDE
ABCDE
AAAAAAAAABBBBCCCC
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
TOO LONG
<( ̄︶ ̄)> 别想得太复杂,每一步都想清楚,简单才是美。Just do it!
#include <iostream>
#include <string>
using namespace std;
int main()
{
int num; string str, strp;
while (getline(cin, str))
{
strp.clear();
/// 循环更新
for (int i = 0; i < str.size(); i++)
{
if (str[i] >= '0' && str[i] <= '9')
{
num = 0;
/// 注意num的范围,要是不加限制有可能会很大,甚至超过int的范围
while (str[i] >= '0' && str[i] <= '9' && num <= 50)
{
num = 10 * num + str[i] - 48;
i++;
}
strp += string(num, str[i]);
}
else
strp += str[i];
}
/// 输出
if (strp.size() <= 50)
cout << strp << endl;
else
cout << "TOO LONG" << endl;
}
return 0;
}