C++ で出力を右揃え
胡金庫
2023年10月12日
この記事では、C++ で出力ストリームを右寄せする方法について複数のメソッドを示します。
C++ で std::right
と std::setw
を使用して出力を右揃えにする
C++ 標準ライブラリには、<< >>
演算子を用いてストリームをよりよく制御するための I/O マニピュレータヘルパー関数が用意されており、<iomanip>
ヘッダーファイルに含まれています。std::right
は、塗りつぶし文字の位置を設定するストリームマニピュレータの一つです。したがって、std::setw
マニピュレータ関数と併用する必要があります。std::setw
は、ストリーム幅に割り当てる文字数を指定するために 1つの整数を引数に取ります。
次のコード例では、double
のベクトルを精度の異なる任意の値で初期化し、コンソールの右端に揃えて出力しています。
#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::fixed;
using std::right;
using std::setw;
using std::vector;
int main() {
vector<double> d_vec = {123.231, 2.2343, 0.324, 0.012,
26.9491092019, 11013, 92.001112, 0.000000234};
for (auto &i : d_vec) {
cout << right << setw(20) << fixed << i << endl;
}
cout << endl;
return EXIT_SUCCESS;
}
出力:
123.231000
2.234300
0.324000
0.012000
26.949109
11013.000000
92.001112
0.000000
C++ で出力を右揃えにするには printf
関数を使用する
I/O フォーマットを扱うもう一つの強力な関数が printf
です。printf
は cin
/cout
ストリームでは使用されませんが、変数引数を個別にフォーマットすることができます。浮動小数点値には %f
形式の指定子を使用し、各要素に充填文字を追加するために任意の数 20
を使用していることに注意してください。その結果、各行は 20
文字幅となり、数値が正の値であるため、充填文字は左から追加されます。
#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::fixed;
using std::right;
using std::setw;
using std::vector;
int main() {
vector<double> d_vec = {123.231, 2.2343, 0.324, 0.012,
26.9491092019, 11013, 92.001112, 0.000000234};
for (auto &i : d_vec) {
printf("%20f\n", i);
}
return EXIT_SUCCESS;
}
出力:
123.231000
2.234300
0.324000
0.012000
26.949109
11013.000000
92.001112
0.000000
あるいは、書式指定子に負の整数を挿入して右側に文字を埋め、出力を左に正当化することもできます。printf
のもう一つの強力な機能は、以下のサンプルコードで示されているように、リテラル文字列の値をフォーマットすることです。なお、%c
は char
の書式指定子であり、0x20
の値はスペース文字の 16 進数であることに注意してください。
#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::fixed;
using std::right;
using std::setw;
using std::vector;
int main() {
vector<double> d_vec = {123.231, 2.2343, 0.324, 0.012,
26.9491092019, 11013, 92.001112, 0.000000234};
for (auto &i : d_vec) {
printf("%-20f\n", i);
}
printf("%60s\n", "this ought to be justified right");
printf("%-20s|%20c|%20s\n", "wandering", 0x20, "the tower");
return EXIT_SUCCESS;
}
出力:
123.231000
2.234300
0.324000
0.012000
26.949109
11013.000000
92.001112
0.000000
this ought to be justified right
wandering | | the tower
著者: 胡金庫