C++可以使用setw和setfill来填充字符串的末尾吗?

19
有没有一种方法可以使得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";
}

我猜这样做可以完成任务,但感觉有点笨重。

还有什么其他想法吗?

3个回答

34
你可以使用操纵器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

编辑: 如链接中所述,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

太棒了。作为对你回答的跟进,std::internal是如何工作的? - Dan

1

类似于:

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

生成类似于:

derp..........................:234
herpderpborp..................:12345678

0
#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!..................

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接