在C ++中填充stlstring

我正在使用std::string ,需要将它们填充到给定的宽度。 C ++中推荐的方法是什么?

示例input:

 123 

填充到10个字符。

示例输出:

  123 

(7个空格,123之前)

std :: setw(setwidth)操纵器

 std::cout << std::setw (10) << 77 << std::endl; 

要么

 std::cout << std::setw (10) << "hi!" << std::endl; 

输出填充77和“嗨!”。

如果你需要结果作为string使用std :: stringstream的实例,而不是std :: cout对象。

ps:负责的头文件<iomanip>

 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; } 

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

 string foo = "foo"; stringstream ss; ss << setw(10) << foo; foo = ss.str(); 

现在应该填充。

你可以像这样使用它:

 std::string s = "123"; s.insert(s.begin(), paddedLength - s.size(), ' '); 

你可以通过调用创build一个包含N个空格的string

 string(N, ' '); 

所以你可以这样做:

 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; } 
 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; } 

怎么样:

 string s = " "; // 10 spaces string n = "123"; n.length() <= 10 ? s.replace(10 - n.length(), n.length(), s) : s = n; 

有一个很好的和简单的方法:)

 const int required_pad = 10; std::string myString = "123"; size_t length = myString.length(); if (length < required_pad) myString.insert(0, required_pad - length, ' '); 

创build一个10个空格的新string,并在两个string中向后工作。

 string padstring(const string &source, size_t totalLength, char padChar) { if (source.length() >= totalLength) return source; string padded(totalLength, padChar); string::const_reverse_iterator iSource = source.rbegin(); string::reverse_iterator iPadded = padded.rbegin(); for (;iSource != source.rend(); ++iSource, ++iPadded) *iPadded = *iSource; return padded; }