1

このプログラムでは、プログラムを 1 行ずつ読み込んでから、文字列の一部を抽出して別の関数に送信する、与えられた関数を使用することになっています。ファイルの読み取りと「保存」に問題があります

void histogram(const int MaxPages, istream& input, ostream& output)
{
CountedLocation *array[MaxPages];
int linenum = 0;

string temp;
//getline(input, linestring);
//output << linestring;
while (linenum < MaxPages)
{
   string linestring = "";
   getline(input, linestring);
   //linenum++;
   extractTheRequest(linestring);
   if (isAGet(linestring) == true)
   {
       extractLocator(linestring);
       linenum++;
       output << linestring << endl;
       output << "test1";
   }
   linenum++;
}

問題は、プログラムが実際にファイルを「読み取らない」ことです。「string linestring = "f"」のように、string tempの初期化のすぐ下で線ストリングを初期化してみました。もちろん、このプログラムはテキスト ファイルをいくつかの 'f' をつなぎ合わせたものとして出力します。行ごとに読み方を調べてみましたが、大多数はistreamを使用しておらず、ヒストグラム関数以外は編集できません。「isAGet」に関するifステートメントには、実際に「発生」するものは何もありません。

私の問題は; テキスト ファイルを 1 行ずつ読み取り、各行を文字列に格納するにはどうすればよいですか。以下のようなループで行を一時ストリームに保存し、必要なことを行い、ストリームをクリアしてプロセスを繰り返すことができるのではないかと考えました。もっと簡単な別のアプローチはありますか?私は自分でそれを理解することはできません。

4

2 に答える 2

1

コードは次のようになります。

void histogram(const int MaxPages, istream& input, ostream& output) {
    if (!input.good()) {
        cerr << "File doesn't exist" << endl;
        return;
    }

    string line;
    for (int line_no = 0; getline(input, line); ++line_no) {
        output << '"' << line << '"' << endl;
    }
}

コンソールに出された引用に言及してください。ファイルの最後の行が空の場合getline、エラーが返され、work_with_that_line呼び出されないことを示しています。getlineこれは、スタイルのファイル入力に関する広く知られている問題です。気になる場合は、文字単位またはバイナリ入力の使用を検討してください。

于 2013-10-24T15:17:07.467 に答える