如何在C ++ cout中集中方便地对齐数字

时间:2012-01-05 22:34:08

标签: c++

我在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 

假设我的数字中有更多数字。

3 个答案:

答案 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