我在c ++中的int [] []中存储了以下矩阵(抱歉我没有把所有的逗号都放进去):
int[8][]a={
1 2 3 4 5 6 7 8
28 29 30 31 32 33 34 9
27 48 49 50 51 52 35 10
26 47 60 61 62 53 36 11
25 46 59 64 63 54 37 12
24 45 58 57 56 55 38 13
23 44 43 42 41 40 39 14
22 21 20 19 18 17 16 15};
我需要打印出一个数字与其余部分很好地对齐。如何方便地做到这一点?我已经使用过setw
,但它似乎只会导致输出右对齐。
谢谢。
修改
也许我没有说清楚。对于那个很抱歉。我希望输出类似于:
1 2 3 4 5 6 7 8
228 129 130 131 32 33 34 9
假设我的数字中有更多数字。
答案 0 :(得分:6)
你想#include iomanip,并使用std :: setw和std :: right(或DietmarKühl提到的其他一个对齐方式)。这是一个例子:
#include <iostream>
#include <iomanip>
int main(int argc, const char* argv[])
{
int numbers[4][4] = {
{1, 10, 5, 6},
{536, 5769, 342, 112},
{2,43,43,6},
{2,2,2,3}};
for(int i = 0; i < 4; ++i)
{
for(int j = 0; j < 4; ++j)
{
std::cout << std::right << std::setw(7) << numbers[i][j];
}
std::cout << std::endl;
}
return 0;
}
在上面的示例中,我打印的数字与列宽7对齐,结果输出如下:
1 10 5 6
536 5769 342 112
2 43 43 6
2 2 2 3
答案 1 :(得分:4)
您可以选择填充的位置:
out << std::left
将导致输出左对齐out << std::right
会导致输出右对齐out << std::internal
将证明任何符号都是正确的,并且右对齐out << std::showpos
会同时显示正号和负号(如果您想查看std::internal
的效果最初设置流以进行左对齐(尽管我扼杀了标准中没有看到相应的定义)。
答案 2 :(得分:0)
打印以字段为中心的数字:
#include <string>
#include <iostream>
#include <sstream>
using namespace std;
// Print num centered in width columns
void centerint(int num, int width)
{
stringstream ss;
ss << num;
string str = ss.str();
int pad = (width - str.size())/2;
for(int i=0; i<pad; i++)
cout << " ";
cout << str << endl;
}
int main()
{
// lets try a few
centerint( 1, 9);
centerint(-238, 9);
centerint( 16, 9);
}
打印:
1
-238
16