web-dev-qa-db-ja.com

出力を列に正しく整理するにはどうすればよいですか?

私の頭に浮かぶ最初のことは、たくさんの\ tを行うことですが、Wordが他のWordよりも数文字長い場合、単語が不整列になります。

たとえば、次のようなものが欲しいです。

Name    Last Name            Middle initial
Bob     Jones                M
Joe     ReallyLongLastName   T

代わりに、coutステートメントに「\ t」のみを含めることで、取得することしかできません

Name    Last Name            Middle initial
Bob     Jones                M
Joe     ReallyLongLastName                T

または

Name    Last Name            Middle initial
Bob     Jones    M
Joe     ReallyLongLastName   T

他に何をする必要がありますか?

編集:だから私は最初に表示したい各列の最大幅を数え、次にそれに応じてパディングスペースを追加する必要があると思います。しかし、どのようにして、どの機能でこれを行うことができますか?単純に文字列内の文字数をカウントして、そこから先に進む必要がありますか?

25
wrongusername

使用する - std::setw from <iomanip>

例えば.

using std::cout;
using std::setw;

cout << setw(10) << "This" <<
        setw(10) << "is" <<
        setw(10) << "a" <<
        setw(10) << "test" << '\n';

出力:

      This        is         a      test
30
Peter Alexander

また、異なるエディター/ビューアーが異なるタブ幅のテキストを表示することを考慮する必要があります。そのため、タブを使用すると、あるビューアーでうまく配置されたテキストが別のビューアーで見苦しく見える場合があります。

本当にすてきな配置を作成したい場合は、パディングスペースを使用し、テキストに対して2つのパスを実行できます。最初に各列の最大幅をカウントし、次に各列に適切な量のパディングスペースを追加します。後者の場合、テーラーメイドのprintf呼び出しを使用することもできます。

更新:列幅のカウントは、基本的に、指定した列にある文字列の長さをカウントすることを意味します。 std::string またはchar*(前者を推奨)を使用しているかどうかに応じて、string::length()またはstrlen()を使用して実行できます。次に、その列のすべての単語を繰り返し処理し、現在までの最大単語長を比較します。現在の単語が長い場合は、その長さを新しい最大値に設定します。単語をSTLコンテナに保存する場合、 std::max_elementアルゴリズム を使用して、1回の関数呼び出しでジョブを実行することもできます。

7
Péter Török

printf()パディングを使用して、左揃えにminusフラグを使用します

 printf("%-8s%-21s%-7s%-6s\n", "Name", "Last Name", "Middle", "initial");
 printf("%-8s%-21s%-7s%-6s\n", "Bob", "Jones", "M", "");
 printf("%-8s%-21s%-7s%-6s\n", "Joe", "ReallyLongLastName", "T", "");

生成するもの:

Name    Last Name            Middle initial
Bob     Jones                M
Joe     ReallyLongLastName   T
6
Alex Jasmin

このような状況では、通常、2つのパスが必要です。1つは各列の最大幅を検出し、もう1つは印刷を実行します。標準のiostreamの場合、width()ルーチンを使用して、iostreamに自動的にパディングを処理させることができます。

2
fbrereto

(stdioからの)文字列フォーマットを使用して、各行を表示します。

http://www.cppreference.com/wiki/c/io/printf

最小のフィールド幅を設定できるので、各フィールドの残りの部分が埋め込まれます。

0
kafuchau