Printfを使用するときに、文字列の左側にスペースを埋め込むにはどうすればよいですか?
たとえば、40個のスペースを前に付けて "Hello"を印刷したいとします。
また、印刷する文字列は複数の行で構成されています。各行を個別に印刷する必要がありますか?
編集:明確にするために、各行の前に正確に40個のスペースを印刷します。
Word "Hello"を、幅が40文字で、左側にスペースが埋め込まれた列に印刷する場合は、次を使用します。
char *ptr = "Hello";
printf("%40s\n", ptr);
これで35個のスペースが得られ、次に「Hello」という単語が表示されます。これは、列の幅を知っているときにデータをフォーマットする方法ですが、データが変更されます(まあ、それはone方法です)。
正確に40個のスペースが必要なことがわかっている場合は、40個のスペースを定数に保存して印刷します。複数の行を印刷する必要がある場合は、上記のような複数のprintf
ステートメントを使用するか、毎回ptr
の値を変更してループで実行します。
この機能を使用して、出力をインデントします(たとえば、ツリー構造を印刷します)。 indent
は、文字列の前のスペースの数です。
void print_with_indent(int indent, char * string)
{
printf("%*s%s", indent, "", string);
}
int space = 40;
printf("%*s", space, "Hello");
このステートメントは、40文字の行を予約し、行の最後に文字列を印刷します(行の合計長が40で一定になるように余分なスペースを削除します)。次のように、文字および整数に同じものを使用できます。
printf("%*d", space, 10);
printf("%*c", space, 'x');
パラメータを使用してスペースを決定するこの方法は、可変数のスペースが必要な場合に役立ちます。これらのステートメントは、次のように整数リテラルで引き続き機能します。
printf("%*d", 10, 10);
printf("%*c", 20, 'x');
printf("%*s", 30, "Hello");
これが将来私のような人に役立つことを願っています。
文字列の前に正確に40個のスペースが必要な場合は、次のようにします。
printf(" %s\n", myStr );
それがあまりにも汚れている場合は、それを行うことができます(ただし、40個のスペースを手動で入力するよりも遅くなります):printf("%40s%s", "", myStr );
文字列を列40に並べる(つまり、右端の文字が列40になるように最大39個のスペースを配置する)場合は、次のようにします:printf("%40s", myStr);
以下を実行することで、文字列の後に「最大」40個のスペースを入れることもできます:printf("%-40s", myStr);