4

STLを使用しています。テキストファイルから行を読み取る必要があります。最初(スペース)\nまでではなく、最初まで行を読み取る方法は?' '

たとえば、私のテキストファイルには次のものが含まれています。

Hello world
Hey there

私がこのように書く場合:

ifstream file("FileWithGreetings.txt");
string str("");
file >> str;

次に、str「Hello」のみが含まれますが、「Helloworld」が必要です(最初まで\n)。

この方法を使用できると思いgetline()ましたが、読み取る記号の数を指定する必要があります。私の場合、いくつの記号を読むべきかわかりません。

4

4 に答える 4

9

getline を使用できます。

#include <string>
#include <iostream>

int main() {
   std::string line;
   if (getline(std::cin,line)) {
      // line is the whole line
   }
}
于 2013-03-12T13:18:55.930 に答える
2

私に答えてくれたすべての人に感謝します。プログラム用に新しいコードを作成しました。これは次のように機能します。

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(int argc, char** argv)
{
    ifstream ifile(argv[1]);

    // ...

    while (!ifile.eof())
    {
        string line("");
        if (getline(ifile, line))
        {
            // the line is a whole line
        }

        // ...
    }

    ifile.close();

    return 0;
}
于 2013-03-12T13:41:52.033 に答える
2

関数の使用getlineは 1 つのオプションです。

また

getcdo-while ループで各文字を読み取る

ファイルが数字で構成されている場合、これはより良い読み取り方法です。

do {
    int item=0, pos=0;
    c = getc(in);
    while((c >= '0') && (c <= '9')) {
      item *=10;
      item += int(c)-int('0');
      c = getc(in);
      pos++;
    } 
    if(pos) list.push_back(item);
  }while(c != '\n' && !feof(in));

ファイルが文字列で構成されている場合は、このメソッドを変更してみてください..

于 2013-03-12T13:31:30.040 に答える
1

私は提案します:

#include<fstream>

ifstream reader([filename], [ifstream::in or std::ios_base::in);

if(ifstream){ // confirm stream is in a good state
   while(!reader.eof()){
     reader.read(std::string, size_t how_long?);
     // Then process the std::string as described below
   }
}

std::string の場合、任意の変数名で、どのくらいの期間、適切と思われるか、上記のように std::getline を使用してもかまいません。

行を処理するには、std::string でイテレータを使用します。

std::string::iterator begin() & std::string::iterator end() 

探している \n と ' ' が得られるまで、イテレータ ポインタを 1 文字ずつ処理します。

于 2013-03-12T13:33:24.300 に答える