C++ で setw マニピュレーターを利用する
この記事は、C++ で setw
ストリームマニピュレータを利用する方法を示しています。
C++ で std::setw
関数を使用して次の I / O 操作の幅を変更する
ストリームマニピュレータは、入出力フォーマットを変更し、場合によっては何らかのアクションを生成する特別なオブジェクトです。std::endl
関数は、おそらく出力ストリームで使用される最も一般的なオブジェクトであり、実際にはストリームマニピュレータです。改行文字を出力し、出力バッファをフラッシュします。
一方、std::setw
コマンドは出力を生成しません。代わりに、次の I / O の幅を渡された整数引数に設定します。一部のストリームマニピュレータは引数を使用します。これらには、<iomanip>
ヘッダーを含める必要があります。次の例は、setw
マニピュレータの基本的な出力フォーマットシナリオを示しています。setfill
マニピュレータは、setw
の自然なコンパニオンです。前者は、指定された char
引数を使用して塗りつぶし文字を変更する場合に役立ちます。
#include <iomanip>
#include <iostream>
#include <sstream>
using std::cout;
using std::endl;
using std::setw;
using std::string;
int main() {
cout << "setw() : |" << 11 << "|" << endl
<< "setw(4): |" << setw(4) << 11 << "|" << endl
<< "setw(4): |" << 22 << setw(4) << std::setfill('-') << 22 << 33 << "|"
<< endl;
return EXIT_SUCCESS;
}
出力:
setw() : |11|
setw(4): | 11|
setw(4): |22--2233|
または、setw
マニピュレータを使用して、stringstream
オブジェクトから抽出される文字数を制限することもできます。このメソッドは、固定配列として宣言されている char
バッファーに役立つ場合があります。一般に、マニピュレータは関数のオーバーロードを使用して実装されます。
各マニピュレータは、ストリームへの参照を返す関数です。これらの関数の 1つへのポインターは、ストリーム抽出/挿入演算子に渡されます。ストリーム抽出/挿入演算子は、それ自体がオーバーロードされた演算子です。引数関数は、オーバーロードされた演算子の本体から呼び出されます。
#include <iomanip>
#include <iostream>
#include <sstream>
using std::cout;
using std::endl;
using std::setw;
using std::string;
int main() {
std::stringstream ss1("hello there");
char arr[10];
ss1 >> setw(6) >> arr;
cout << arr;
return EXIT_SUCCESS;
}
出力:
hello
setw
マニピュレータの便利な機能の 1つは、固定サイズのバッファに保存する必要のあるユーザー入力の制限を簡単に設定できることです。setw
への引数として sizeof(buffer)
を渡す必要があります。setw
呼び出しは単一の I / O 操作に影響し、デフォルトの幅が自動的に復元されることに注意してください。逆に、setfill
の変更は、明示的な変更が行われるまでアクティブのままです。
#include <iomanip>
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
using std::setw;
int main() {
char buffer[24];
cout << "username: ";
cin >> setw(sizeof(buffer)) >> buffer;
return EXIT_SUCCESS;
}
出力:
username: