1

私は現在、C++ で小さなプロジェクトに取り組んでおり、現時点では少し混乱しています。ifstream in() を使用して、ファイルから取得した行で一定量の単語を読み取る必要があります。現在の問題は、スペースを無視し続けるという事実です。単語数を計算するには、ファイル内のスペースの量をカウントする必要があります。in() で空白を無視しないようにする方法はありますか?

ifstream in("input.txt");       
ofstream out("output.txt");

while(in.is_open() && in.good() && out.is_open())
{   
    in >> temp;
    cout << tokencount(temp) << endl;
}
4

3 に答える 3

3

ファイル内のスペースの数をカウントするには:

std::ifstream inFile("input.txt");
std::istreambuf_iterator<char> it (inFile), end;
int numSpaces = std::count(it, end, ' ');

ファイル内の空白文字の数をカウントするには:

std::ifstream inFile("input.txt");
std::istreambuf_iterator<char> it (inFile), end;
int numWS = std::count_if(it, end, (int(*)(int))std::isspace);

別の方法として、スペースを数える代わりに、単語を数えることができます。

std::ifstream inFile("foo.txt);
std::istream_iterator<std::string> it(inFile), end;
int numWords = std::distance(it, end);
于 2013-01-24T21:55:37.847 に答える
2

これが私がそれをする方法です:

std::ifstream fs("input.txt");
std::string line;
while (std::getline(fs, line)) {
    int numSpaces = std::count(line.begin(), line.end(), ' ');
}

一般に、ファイルのすべての行に対して何かを行う必要がある場合、std::getlineが最も厄介な方法であることがわかります。そこからストリーム演算子が必要な場合は、その行だけで文字列ストリームを作成することになります。それは物事を行うための最も効率的な方法からはほど遠いですが、私は通常、それを正しくし、この種のことのために人生を進めることにもっと関心があります。

于 2013-01-24T22:20:45.883 に答える