我有一个非常长的.txt文件,我希望使用getline
来传输。我想输入整个文本文档,然后通过一个过程运行它。
然后,我想使用不同的值通过相同的过程运行该新字符串,等等2次。
到目前为止我已经
了#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void flag(string & line, int len);
void cut(string & line, int numb);
int main()
{
string flow;
ifstream input;
ofstream output;
input.open(filename.c_str()); //filename ...
output.open("flow.txt");
while (!input.fail())
getline(input, flow);
flag(flow, 10);
flag(flow, 20);
cut(flow, 20);
cut(flow, 3);
output << flow;
return 10;
}
//procedures are defined below.
我遇到了通过程序运行整个文件的麻烦。我将如何使用getline
流式传输此内容。
我尝试过getline
,infile.fail
,npos
等。
答案 0 :(得分:1)
而不是:
while(!input.fail())
getline(input, flow);
flag(flow, 10);
flag(flow, 20);
cut(flow, 20);
cut(flow, 3);
你可能想要这个:
while(getline(input, flow)) {
flag(flow, 10);
flag(flow, 20);
cut(flow, 20);
cut(flow, 3);
}
除非我误解了你,你想先读完整个文件,然后拨打flag
和cut
。在这种情况下,您需要追加您读取的字符串:
string data;
while(getline(input, flow)) data += flow + '\n'; // add the newline character
// because getline doesn't save them
flag(data, 10);
flag(data, 20);
cut(data, 20);
cut(data, 3);
请注意getline
会覆盖您传递给它的字符串。
此外,while (!input.fail())
是一种糟糕的循环条件。可能会发生没有更多输入可用但流仍未处于故障状态。在这种情况下,最后一次迭代将处理无效输入。