2017-09-13 6 views
-2

たとえば、C++の入力ストリームがあるとします。リリース日と名前を持つ書籍のリストが含まれています。入力データの行は次のようになります。2つの文字列にデータを入力

私は書籍のタイトルを1つの文字列に入れて、その年が別の文字列で公開された年です。そのようなstring foo = Book title here ;とそのstring bar = Month Day, Year;しかし、あなたは単にdata >> stringを行う場合、それは次の空白に行くだけです。 fooはfoo = Month、バーはbar = Day,となります。 Getlineは、fooがfoo = Month Day, Year Book title hereになり、barが次の行になるか、誰が何を知っているのかを知るための行全体を取得します。

どのように私はこれについて正確に行くだろうか?

+1

あなたのアイデアを試してみることでコードを入力してください。 – Edit

+2

まず、完全な行を読むことをお勧めします。その後、文字列の上を通過して、年、曜日、月を渡します。次に、書籍のタイトルがどこで終わるかを知っています。 –

+1

ここでは正規表現が役に立つかもしれませんが、独自の学習曲線があります。 – Galik

答えて

0

Comma-Separated Valueを使用することをお勧めします。読み取る各要素は、選択した記号(例:​​3210)で区切られています。

Book title here;Month Day, Year 

次にあなたがgetline()の三番目のパラメータは、文字列の区切りとして使用する記号を指定し

std::string title, date; 

std::getline(yourFile, title, ';'); 
std::getline(yourFile, date); 

を使用してファイルを読むことができます。

は行ベースのフォーマットは、それが全体のラインを先読みして、より詳細に行の内容を分析するのが最善ですが、最初から最後までを解析する複雑になると、それは

0

に役立ちます願っています。

デリミタが定義されていないか、行末に達していない限り、本のタイトルの一部または書籍の日付を読んだかどうかわからないので、これはあなたの質問の場合です。次の例ではラインを考えてみましょう:あなたは左から右、このテキストを解析した場合

"Book Horror Story September 11, 2001" 
"Book Horror Story September 11, 2001 October 12, 2019" 

、日付のタイトルや一部の一部である「2001年9月11日」かどうかを知ることができない、あなたが最後に到達するまで、ラインの。

したがって、std::getlineから始めて、行全体を文字列に読み込み、各行から詳細を抽出します。 @Someprogrammerdudeコメント付きの行を右から左に手動で解析するには、行形式を受け入れる正規表現を開発するか、その他の適切な手法を使用します。

関連する問題