我试图用简单的输入实现算法RLE,如:
Paul 46
Sarah 46
代码:
ddddddddddhhhhhhhhhhhhhhhttttttttttttt
我得到的输出是:
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
int main() {
vector<char> read;
ifstream file;
file.open("file.txt");
if (!file) {
cout << "Unable to open";
}
char v;
while(file>>v) {
read.push_back(v);
}
char x;
int count=0;
for(int i=0; i<read.size(); i++) {
x = read[i];
if(x != read[++i]) {
cout << x << "1";
}
while(x == read[++i]) {
count++;
}
cout << x << count;
count = 0;
}
return 0;
}
请帮我解释一下代码。
更新:我已经更新了这个问题,因为我已经意识到了一些事情。
加号:这段代码没有输出,有什么不对的我做错了吗?
d9d1h12h1t10t1
答案 0 :(得分:0)
这个循环:
define
有几个错误。首先,您应该使用两个索引char x;
int count=0;
for(int i=0; i<read.size(); i++) {
int j=i;
x = read[i];
if(x != read[++j]) {
cout << x << "1";
}
while(x == read[++j]) {
count++;
}
cout << x << count;
}
和i
。 j
正在遍历i
的每个元素,但是read
也会遍历子序列。你想要的只是通过每个元素一次,并在每种情况下打印或增加计数。但是,使用for循环并将索引移入其中也不是一个很好的做法,而是容易出错。此外,你必须j
语句不能在正确的时间运行(你不想在每次迭代时打印一些东西,只有当角色改变时)。您可以使用while循环,或使用更简单的结构:
cout