0

を使用してストリーミングしたい非常に長い.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

4

1 に答える 1

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);
}

私があなたを誤解していて、最初にファイル全体を読んでから and を呼び出したい場合を除き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())ループ状態の悪い形です。利用可能な入力がもうないのに、ストリームがまだ失敗状態にないということが起こるかもしれません。その場合、最後の反復で無効な入力が処理されます。

于 2013-03-12T20:32:40.450 に答える