printf
に可変サイズのパディングを設定する方法はありますか?
パディングの大きさを示す整数があります。
void foo(int paddingSize) {
printf("%...MyText", paddingSize);
}
これにより、### MyText
が出力され、paddingSizeが「#」記号の数を決定する必要があります。
はい、フォーマット文字列で*
を使用すると、引数から数値が取得されます。
printf ("%0*d\n", 3, 5);
「005」を出力します。
スペースまたはゼロでのみ埋めることができることに注意してください。他のもので埋めたい場合は、次のようなものを使用できます。
#include <stdio.h>
#include <string.h>
int main (void) {
char *s = "MyText";
unsigned int sz = 9;
char *pad = "########################################";
printf ("%.*s%s\n", (sz < strlen(s)) ? 0 : sz - strlen(s), pad, s);
}
これは、sz
が9の場合は###MyText
を出力し、MyText
が2の場合はsz
を出力します(パディングなし、切り捨てなし)。 pad
が短すぎるかどうかのチェックを追加することをお勧めします。
ただし、注意してください-少なくとも一部のコンパイラ(これは一般的なCのことかもしれません)は、必ずしもあなたが望むことをするわけではありません:
char *s = "four";
printf("%*.s\n", 5, s); // Note the "."
これは5つのスペースを印刷します。
char *s = "four";
printf("%*s\n", 3, s); // Note no "."
これにより、4文字すべてが「4」で印刷されます。
あなたはこのように書くことができます:
void foo(int paddingSize) {
printf ("%*s",paddingSize,"MyText");
}
printf( "%.*s", paddingSize, string );
例えば:
const char *string = "12345678901234567890";
printf( "5:%.*s\n", 5, string );
printf( "8:%.*s\n", 8, string );
printf( "25:%.*s\n", 25, string );
表示:
5:12345
8:12345678
25:12345678901234567890
std :: coutをよりよく使用する
using namespace std;
cout << setw(9) //set output width
<< setfill('#') // set fill character
<< setiosflags(ios_base::right) //put padding to the left
<< "MyText";
生成する必要があります:
###MyText