0

私はC ++には少し慣れていません。ストリームから読み取るときは、左から読み取ることを理解しています。たとえば、次の行を含むファイルがある場合:

ストリームで遊んでいます

ファイルを読み取るとき、ファイルから取得する最初の文字列はI'm

取得する最初の文字列をstreams

基本的に、右からストリームを読み取ります。

注: これは、一度に行全体を読み取らないことを前提としています。

4

3 に答える 3

1

ストリームは左から右に読み取られるのではなく、最初から最後に読み取られます。これらは、これが論理的な読み取り方法であり、場合によっては (キーボード入力など) 唯一の賢明な読み取り方法である場合にモデル化することになっています。開始時に完全に認識されているストリーム (ファイルなど) の場合、本当に必要な場合は、苦労して最後の要素をシークし、それらを 1 つずつシークしながら読み取ることができます。これは遅くて醜いでしょう。

代わりに、通常の方法で最初から最後まで読み、取得したらデータを操作することをお勧めします。

于 2013-02-22T09:00:35.433 に答える
0

いいえ、ストリーム ライブラリではこれはサポートされていません。ファイルは通常、文書データが左から右、上から下に配置されます。可変長の行を指定すると、通常、行内のすべてのデータをスキャンしない限り、行がどこで終了するかを知ることはできません。

この要件については、getline を使用して行全体を文字列に読み込むのが最善であり、次のような多くのオプションがあります。

  • 独自の文字列スキャナーを作成して、各単語を順番に検索します (十分に単純で高速です)。
  • 反転された行テキストから istringstream を作成し、ループして各単語を順番にストリーミングします - 処理前にそれを反転します (ストリーム機能に便利です - 空白のスキップ、変換、ステータスなど)。
  • 行を配列などにトークン化し、それを逆の順序で繰り返します (概念的には単純ですが、メモリを大量に消費します)。
于 2013-02-22T09:01:34.920 に答える
0

あなたがしたいことは、ストリーム全体ではなく、単語を右から左に読むことです。ストリームを右から左に読み取ると、smaertsnot in になり、すぐにstreamsそれを行うことはできないと確信しています。私が提案するのは、単語をベクトルで読んでから逆にすることです。または、読み取る前に文字列全体を反転し、読み取り後に各単語を反転します。

于 2013-02-22T08:57:50.943 に答える