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 関数を使う方法が、判りやすい気がしておすすめです。


[ もどる ]