std::istream で空白文字を読み飛ばさないようにする - C++ プログラミング
PROGRAM
std::istream で空白文字を読み飛ばさないようにする
C++ の std::istream などの入力ストリームでは、たとえばストリーム入力演算子 (>>) を使ったり、イテレータに変換 して読み込んだりしたときに、既定では空白文字を無視して、ストリームの値を読み込むようになっているようです。
空白文字を読み飛ばさないようにしたい場合は次のようにして、入力ストリームの skipws フラグをオフにする必要があります。
// 入力ストリームの unsetf 関数を使って skipws フラグをオフにする方法です。
stream.unsetf(std::ios::skipws);
これで、これ以降は空白文字をスキップしないようになります。
なお、同じく skipws フラグをリセットする方法として、ストリーム入力演算子を使う方法もあります。
// ストリーム入力演算子を使って skipws フラグをオフにする方法です。
stream >> std::noskipws;
これでも、これ以降の空白文字を読み飛ばさないようにすることができます。
ただしこのコードだと、見た目の雰囲気のお話ですけど、慣れないとなんだかストリームから std::noskipws に何かを代入しているかのようにも見えてしまって、演算子の意味と動きに違和感があるような気がします。
問題はないですけど、個人的には unsetf 関数を使う方法が、判りやすい気がしておすすめです。
[ もどる ]