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