在打印出字符串后设置填充

C++: set fill after printing out a string

本文关键字:设置 填充 字符串 打印      更新时间:2023-10-16

我正在尝试cout一个字符串,使输出的总长度为,例如15。

例如,如果字符串是"Tom",那么我希望cout后面有12个空格。我知道如何使用setfillsetw有前导空格,但有一个内置的方式填充空格后?或者唯一的方法就是得到字符串的长度然后在字符串的末尾加上一些空格?

谢谢!

我想你正在寻找std::left输出修饰符。

#include <iomanip>    // std::setw
#include <ios>        // std::left
#include <iostream>   // std::cout
#include <string>     // std::string
int
main()
{
  const std::string words[] = {
    "Tom",
    "Ferdinand",
    "And finally some longer string",
  };
  for (const auto& w : words)
    std::cout << std::setw(12) << std::left << w << "|n";
}
输出:

Tom         |
Ferdinand   |
And finally some longer string|

使用标头ios中定义的IO操纵符std::left

http://en.cppreference.com/w/cpp/io/manip/left

我正在尝试计算一个字符串,以便输出的总长度为,说15。例如,如果字符串是"Tom",那么我需要12个空格后cout。

我已经用了下面的…

// ...
{
    std::stringstream ss1;
    ss1 << "Tom"; // insert 
    const int NameFieldSize = 15;
    while (ss1.str().size() < NameFieldSize) ss << " ";
    // ... insert the rest of the info to ss1
    // now write the full string to cout (or file)
    std::cout << ss1.str() << std::endl;
}
// ...

stringstream的工作原理就像cout,所有的格式化控件,但是因为它是基于ram的,所以要快得多。

请注意,当ss1已经超过NameFieldSize时,代码将检测并可能'修复'输出格式。