cout:与循环cout语句的一致间距

Mat*_*son 3 c++ formatting cout

我经常遇到一种情况,我想打印一个二维数组到屏幕或文件.我的标准方法是:

for(int q=0; q<x; q++)
{
    cout << "\n";
    for(int w=0; w<y; w++)
        cout << number[q][w] << "\t";
}
Run Code Online (Sandbox Code Playgroud)

然而,当number长度变化的元件时,这通常导致柱未正确对准.如何在每个数字之后(或之前)添加正确数量的空格以使列对齐?

Oli*_*rth 8

使用std::setw(),std::leftstd::right.

#include <iostream>
#include <iomanip>

void printNumber(int x) {
    std::cout << "X:" << std::setw(6) << x << ":X\n";
}

void printStuff() {
    printNumber(528);
    printNumber(3);
    printNumber(73826);
    printNumber(37);
}

int main() {
    std::cout << "Left-aligned\n";
    std::cout << std::left;
    printStuff();
    std::cout << "Right-aligned\n";
    std::cout << std::right;
    printStuff();
}
Run Code Online (Sandbox Code Playgroud)

输出:

Left-aligned
X:528   :X
X:3     :X
X:73826 :X
X:37    :X
Right-aligned
X:   528:X
X:     3:X
X: 73826:X
X:    37:X
Run Code Online (Sandbox Code Playgroud)

(演示:http://ideone.com/6IdIc.)

在这个例子中,我使用了6作为预期的最大宽度.如果您不知道最大值,您需要先对数据进行初步传递才能找到,或者只使用您所使用的数据类型的最大可能性(为了使这个可移植,您可以使用std::numeric_limits<T>::max).