3

2D配列を画面またはファイルに印刷したいという状況に遭遇することがよくあります。私の標準的なアプローチはこれです:

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

ただし、の要素のnumber長さが異なる場合、通常、列が適切に配置されません。各数値の後ろ(または前)に正しい量の空白を追加して、列を揃えるにはどうすればよいですか?

4

1 に答える 1

10

std::setw()std::leftおよびstd::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();
}

出力:

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

(デモ: http://ideone.com/6IdIc )

この例では、予想される最大幅として 6 を使用しました。最大値がわからない場合は、データを最初にパスして確認するか、使用しているデータ型で可能な最大値を使用する必要があります (これを移植可能にするために、std::numeric_limits<T>::max)。

于 2012-07-04T19:06:37.550 に答える