web-dev-qa-db-ja.com

C ++は文字列の終わりにsetwとsetfillを埋め込むことができますか?

setwsetfillを文字列の前ではなく最後に埋め込む方法はありますか?

私はこのようなものを印刷している状況があります。

 CONSTANT TEXT variablesizeName1 .....:number1 

 CONSTANT TEXT varsizeName2 ..........:number2

末尾に変数'.'を追加したい

"CONSTANT TEXT variablesizeName#"なので、画面に":number#"を並べることができます。

注:"variablesizeName#"の配列があるので、最も広いケースがわかります。

または

このようにsetwを設定して手動で行う必要がありますか

for( int x= 0; x < ARRAYSIZE; x++)
{
string temp = string("CONSTANT TEXT ")+variabletext[x];
cout <<  temp;
cout << setw(MAXWIDTH - temp.length) << setfill('.') <<":";
cout << Number<<"\n";
}

これでうまくいくと思いますが、ちょっと不格好な感じがします。

アイデア?

15
Dan

マニピュレーター std::leftstd::rightstd::internal は、埋める文字の移動先を選択します。

あなたの特定のケースでは、このようなことができます:

#include <iostream>
#include <iomanip>
#include <string>

const char* C_TEXT = "Constant text ";
const size_t MAXWIDTH = 10;

void print(const std::string& var_text, int num)
{
    std::cout << C_TEXT
              // align output to left, fill goes to right
              << std::left << std::setw(MAXWIDTH) << std::setfill('.')
              << var_text << ": " << num << '\n';
}

int main()
{
    print("1234567890", 42);
    print("12345", 101);
}

出力:

Constant text 1234567890: 42
Constant text 12345.....: 101

[〜#〜] edit [〜#〜]:リンクで述べたように、std::internalは、整数、浮動小数点、通貨出力でのみ機能します。たとえば、負の整数の場合、負の符号と左端の数字の間に塗りつぶし文字が挿入されます。

この:

int32_t i = -1;
std::cout << std::internal
          << std::setfill('0')
          << std::setw(11)  // max 10 digits + negative sign
          << i << '\n';
i = -123;
std::cout << std::internal
          << std::setfill('0')
          << std::setw(11)
          << i;

出力されます

-0000000001
-0000000123
28
jrok

何かのようなもの:

cout << left << setw(MAXWIDTH) << setfill('.') << temp << ':' << Number << endl;

次のようなものを生成します:

derp..........................:234
herpderpborp..................:12345678
1
Wug
#include <iostream>
#include <iomanip>

int main()
{
   std::cout
      << std::setiosflags(std::ios::left) // left align this section
      << std::setw(30)                    // within a max of 30 characters
      << std::setfill('.')                // fill with .
      << "Hello World!"
      << "\n";
}

//Output:
Hello World!..................
0
Chad