stringstreamにJamesが4であるとすると、getline(stream、stringjames、'')のようなものを記述して個々の単語を取得できますが、行の終わりに到達したことを知る方法はありますか?
通常、std::string
変数に読み込むのが最も簡単です。デフォルトでは、とにかくスペースで区切られていると見なされます。
std::string word;
while (some_stream >> word)
{
// first iteration "James", then "is", then "4", then breaks from while...
}
ボーナス質問!ケース1:ジェームズは4ですケース2:ジェームズは4です
文字列ストリーム内の単語を反復処理していて、int valが4になると予想しているのに、代わりに文字列を受け取った場合、これを確認するための最良の方法は何でしょうか。
最初にそれを読んでから、それを数値にstring
変換できるかどうかを確認するのが最善ですstring
。試してみてくださいstrtoi
strtol
。たとえば、「4q」などの値を検出して拒否できるように、値全体が有効な数値であるかどうかを示すのに役立ちます。
別の方法は、最初に整数型へのストリーミングを試行し、失敗した場合にのみ、ストリームのエラーフラグをリセットして、代わりに文字列を取得することです。文字列変数を読み取ることができるようにストリームの位置を変更する必要があるかどうかは思い出せませんが、いくつかのテストケースを記述して、それを理解することはできます。
または、正規表現と部分式の一致を使用して入力を解析することもできます。式がより複雑になるため、より便利になります。