私の頭に浮かぶ最初のことは、たくさんの\ 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
他に何をする必要がありますか?
編集:だから私は最初に表示したい各列の最大幅を数え、次にそれに応じてパディングスペースを追加する必要があると思います。しかし、どのようにして、どの機能でこれを行うことができますか?単純に文字列内の文字数をカウントして、そこから先に進む必要がありますか?
使用する - 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
また、異なるエディター/ビューアーが異なるタブ幅のテキストを表示することを考慮する必要があります。そのため、タブを使用すると、あるビューアーでうまく配置されたテキストが別のビューアーで見苦しく見える場合があります。
本当にすてきな配置を作成したい場合は、パディングスペースを使用し、テキストに対して2つのパスを実行できます。最初に各列の最大幅をカウントし、次に各列に適切な量のパディングスペースを追加します。後者の場合、テーラーメイドのprintf
呼び出しを使用することもできます。
更新:列幅のカウントは、基本的に、指定した列にある文字列の長さをカウントすることを意味します。 std::string
またはchar*
(前者を推奨)を使用しているかどうかに応じて、string::length()
またはstrlen()
を使用して実行できます。次に、その列のすべての単語を繰り返し処理し、現在までの最大単語長を比較します。現在の単語が長い場合は、その長さを新しい最大値に設定します。単語をSTLコンテナに保存する場合、 std::max_element
アルゴリズム を使用して、1回の関数呼び出しでジョブを実行することもできます。
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
このような状況では、通常、2つのパスが必要です。1つは各列の最大幅を検出し、もう1つは印刷を実行します。標準のiostreamの場合、width()
ルーチンを使用して、iostreamに自動的にパディングを処理させることができます。
(stdioからの)文字列フォーマットを使用して、各行を表示します。
http://www.cppreference.com/wiki/c/io/printf
最小のフィールド幅を設定できるので、各フィールドの残りの部分が埋め込まれます。