用C++填充stl字符串

Ale*_*x B 49 c++ string padding stdstring

我正在使用std::string并需要将它们留到给定的宽度.在C++中这样做的推荐方法是什么?

样本输入:

123
Run Code Online (Sandbox Code Playgroud)

填充到10个字符.

样本输出:

       123
Run Code Online (Sandbox Code Playgroud)

(123前面7个空格)

bay*_*yda 63

std :: setw(setwidth)操纵器

std::cout << std::setw (10) << 77 << std::endl;
Run Code Online (Sandbox Code Playgroud)

要么

std::cout << std::setw (10) << "hi!" << std::endl;
Run Code Online (Sandbox Code Playgroud)

输出填充77和"嗨!".

如果你需要结果作为字符串使用std :: stringstream的实例而不是std :: cout对象.

ps:负责的头文件 <iomanip>

  • 对于使用 stringstream 的简单 std::to_string(n) 似乎有很多开销...... (2认同)

Bri*_*ndy 43

void padTo(std::string &str, const size_t num, const char paddingChar = ' ')
{
    if(num > str.size())
        str.insert(0, num - str.size(), paddingChar);
}

int main(int argc, char **argv)
{
    std::string str = "abcd";
    padTo(str, 10);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • insert(0,...)是个坏主意,因为它很慢,每次插入新的char时都需要复制字符串. (3认同)

Nav*_*een 24

你可以像这样使用它:

std::string s = "123";
s.insert(s.begin(), paddedLength - s.size(), ' ');
Run Code Online (Sandbox Code Playgroud)


gre*_*ade 22

我能想到的最简单的方法是使用stringstream:

string foo = "foo";
stringstream ss;
ss << setw(10) << foo;
foo = ss.str();
Run Code Online (Sandbox Code Playgroud)

foo 现在应该填补.


Ant*_*ima 8

你可以通过调用创建一个包含N个空格的字符串

string(N, ' ');
Run Code Online (Sandbox Code Playgroud)

所以你可以这样做:

string to_be_padded = ...;
if (to_be_padded.size() < 10) {
  string padded(10 - to_be_padded.size(), ' ');
  padded += to_be_padded;
  return padded;
} else { return to_be_padded; }
Run Code Online (Sandbox Code Playgroud)


小智 5

std::string pad_right(std::string const& str, size_t s)
{
    if ( str.size() < s )
        return str + std::string(s-str.size(), ' ');
    else
        return str;
}

std::string pad_left(std::string const& str, size_t s)
{
    if ( str.size() < s )
        return std::string(s-str.size(), ' ') + str;
    else
        return str;
}
Run Code Online (Sandbox Code Playgroud)