#include <iostream>
#include <string>
#include <vector>
using namespace std;
string compression(const string & str){
int i = str.size();
string letters;
letters[0] = str[0];
for (int j = 0; j < i; ++j){
int count = 1;
while (str[j] == str[j+1]){
count++;
j++;
}
letters.push_back('0' + count);
letters.push_back(str[j]);
}
return letters;
}
int main(){
string input;
char c;
try {
cout << "Enter the data to be compressesed: "<< endl;
cin >> input;
for (int z = 0; z < input.length(); ++z){
c = input.at(z);
}
if (!(c >= 'a' && c <= 'z')){
throw runtime_error("error: invalid input");
}
}
catch (runtime_error& excpt){
cout << excpt.what() <<endl;
return 0;
}
cout << "The compressed data is " << compression(input) << endl;
return 0;
}
预期的输出是,每运行一次字符都会重复一次。这是顺序重复的次数。
一些例子:
aaeeeeae = 2a4e1a1e
rr44errre =无效输入
eeeeeeeeeeeeeeeeeeeeeeeee = 21e
仅当字符连续重复9次或更少时,代码才能正常工作。对于10或更大的值,输入是其他符号。 例如,它在10内保持空白,因此如果输入为'aaaaaaaaaabb',则输出将仅为'a2b'而不是'10a2b'。对于11的输出';', 因此如果输入是'aaaaaaaaaaabb',则由于某种原因输出是'; a2b'。
所以我的问题是,我如何使推回功能适用于所有数字,而不仅限于0-9?
如果您要来这里,谢谢您的时间。 ^^
答案 0 :(得分:0)
如果您可以使用c ++ 11或更高版本,则函数compression
如下所示:
string compression(const string & str){
int i = str.size();
string letters;
for (int j = 0; j < i; ++j){
int count = 1;
while (str[j] == str[j+1]){
count++;
j++;
}
letters += std::to_string(count);
letters.push_back(str[j]);
}
return letters;
}