运行-长度编码使用C++
run-length encoding using C++
我有一个包含要编码的字符串的文本文件。
假设是:aaahhhhiii kkkjjhh ikl wwwwwweeeett
这是代码:
void Encode(std::string &inputstring, std::string &outputstring)
{
for (int i = 0; i < inputstring.length(); i++) {
int count = 1;
while (inputstring[i] == inputstring[i+1]) {
count++;
i++;
}
if(count <= 1) {
//std::cout << inputstring[i] << "";
outputstring += inputstring[i];
outputstring += "";
} else {
//std::cout << inputstring[i] << count;
outputstring += inputstring[i];
outputstring += count;
}
}
}
输出应该是:3a4h3i 3k2j2h ikl 6w4e2t
少于(或等于)一个字符的字符或空格直接打印出来 - 没有变化。
到目前为止一切顺利,代码正在运行......实际上。
当我在 if
和 else
中使用 std::cout
时 - 然后它会向我显示如上所示的输出。太完美了
BUT,我想把结果交给参数(std::string &outputstring
),然后在main方法中打印结果。
但它只打印 if statement
而不是 else statement
。
有人可以帮我解决这个问题吗?
您的问题出在行 outputstring += count;
上。将整数分配给字符串时,它被解释为字符代码。你不想要字符代码计数的字符,但你想将数字计数转换为字符串,所以你应该使用 outputstring += std::to_string(count);
我有一个包含要编码的字符串的文本文件。
假设是:aaahhhhiii kkkjjhh ikl wwwwwweeeett
这是代码:
void Encode(std::string &inputstring, std::string &outputstring)
{
for (int i = 0; i < inputstring.length(); i++) {
int count = 1;
while (inputstring[i] == inputstring[i+1]) {
count++;
i++;
}
if(count <= 1) {
//std::cout << inputstring[i] << "";
outputstring += inputstring[i];
outputstring += "";
} else {
//std::cout << inputstring[i] << count;
outputstring += inputstring[i];
outputstring += count;
}
}
}
输出应该是:3a4h3i 3k2j2h ikl 6w4e2t
少于(或等于)一个字符的字符或空格直接打印出来 - 没有变化。
到目前为止一切顺利,代码正在运行......实际上。
当我在 if
和 else
中使用 std::cout
时 - 然后它会向我显示如上所示的输出。太完美了
BUT,我想把结果交给参数(std::string &outputstring
),然后在main方法中打印结果。
但它只打印 if statement
而不是 else statement
。
有人可以帮我解决这个问题吗?
您的问题出在行 outputstring += count;
上。将整数分配给字符串时,它被解释为字符代码。你不想要字符代码计数的字符,但你想将数字计数转换为字符串,所以你应该使用 outputstring += std::to_string(count);