这个RLE解码功能只解码第一个字符,我做错了什么?
This RLE decoding function is decoding only the first character, what am I doing wrong?
我正在编写一个简单的程序,它使用 RLE 算法压缩字符串,我成功地编写了编码函数,并认为我也已经弄清楚了解码函数,但它没有给出正确的输出。
string RunLengthDecoding(string input)
{
string decodedOutput = "";
int secondIterator = 0;
for(int firstIterator=0; firstIterator<input.length(); firstIterator++)
{
string counter = ""; int letterCoefficient = 0;
if(!isalpha(input[firstIterator]))
continue;
else
{
counter = input.substr(secondIterator, firstIterator);
secondIterator = firstIterator;
istringstream(counter) >> letterCoefficient;
for(int i=0; i<letterCoefficient; i++)
decodedOutput += input[firstIterator];
}
}
return decodedOutput;
}
如果我输入"6A"或任何粘在任何单数字符上的数字,它可以正常工作。 例:
6A -->AAAAAAA, 77B --> BBBBB.....BBBBB 77次。
但是如果我输入"6A3B",它会吐出"AAAAAA"。或者真的任何卡在 A 旁边的数字和卡在 B 旁边的任何数字,它仍然会真正打印第一个字符的前缀次数,完全忽略它后面的所有内容。
应该更像这样:
string RunLengthDecoding(string input)
{
string decodedOutput = "";
int secondIterator = 0;
for (int firstIterator = 0; firstIterator<input.length(); firstIterator++)
{
string counter = ""; int letterCoefficient = 0;
if (!isalpha(input[firstIterator]))
continue;
else
{
counter = input.substr(secondIterator, firstIterator - secondIterator); // Little change here
secondIterator = firstIterator + 1; // Add one here
istringstream(counter) >> letterCoefficient;
for (int i = 0; i<letterCoefficient; i++)
decodedOutput += input[firstIterator];
}
}
return decodedOutput;
}
请注意,这似乎适用于基本输入,例如"6A3B25C",但我觉得某些边缘情况会打破这一点,因为没有安全检查。
相关文章:
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- 首要问题的答案让值班员搞错了
- 看起来is_nothrow_constructible_v()在MSVC中被破坏了,我错了吗
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 我的C++线程做错了什么?
- 如何正确使用 >=?(a+f()+c)>=0 错了吗?
- 谁能告诉我我用 getline 做错了什么 (cpp) 格式
- 没有输出的合并排序我做错了什么?
- 我正在尝试使用 while 循环从字符串中删除字母,直到没有字母。我在这里做错了什么?
- 在C++中使用 AKS 素数测试计算双胞胎素数 我做错了什么?
- 指针相关的UE4崩溃.我的指针哪里错了?
- 我一直试图弄清楚我在这个链表程序中做错了什么
- 我正在尝试学习如何在 c++ 中传递指针,但出现错误:没有用于调用"test"的匹配函数。我做错了什么?
- FFMPEG,C++,内存泄漏,我做错了什么?
- 我做错了什么?反向字符串 C++
- 我在这个课上做错了什么?
- 创建整数的 2D 数组,该数组将使用两个函数用随机数填充矩阵.我做错了什么?
- 在不使用内置库函数的情况下添加字符串,我做错了什么?
- 这个RLE解码功能只解码第一个字符,我做错了什么?