题
我使用std::string
并需要左垫它们给定的宽度。什么是推荐的方式在C这样做++?
样品输入:
123
垫10个字符。
示例输出:
123
(7个空格的前123)
解决方案
的std ::运输及工务局局长(setwidth)操纵器
std::cout << std::setw (10) << 77 << std::endl;
或
std::cout << std::setw (10) << "hi!" << std::endl;
输出填充77和 “嗨!”。
如果您需要导致象std :: stringstream的的字符串使用实例,而不是标准:: 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;
}
可以使用这样的:
std::string s = "123";
s.insert(s.begin(), paddedLength - s.size(), ' ');
我能想到的最简单的方法将是一个字符串流:
string foo = "foo";
stringstream ss;
ss << setw(10) << foo;
foo = ss.str();
foo
现在应该填充。
可以通过调用创建含N空格的字符串
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;
}
有一个不错的,简单的方法:)
const int required_pad = 10;
std::string myString = "123";
size_t length = myString.length();
if (length < required_pad)
myString.insert(0, required_pad - length, ' ');
如何:
string s = " "; // 10 spaces
string n = "123";
n.length() <= 10 ? s.replace(10 - n.length(), n.length(), s) : s = n;
我一直在寻找,因为即时通讯发展VCL的话题;无论如何制造功能并不不是很难。
void addWhiteSpcs(string &str, int maxLength) {
int i, length;
length = str.length();
for(i=length; i<maxLength; i++)
str += " ";
};
string name1 = "johnny";
string name2 = "cash";
addWhiteSpcs(name1, 10);
addWhiteSpcs(name2, 10);
在这两种情况下,将添加到右侧10个空格。我建议使用宽字体像信使或索拉为正确的格式。
这是当你不使用等宽字体结果会发生什么 johnny____结果 现金______
// using monospace font the output will be
johnny____
cash______
两种情况具有相同的长度。
创建10个空格的一个新的字符串,并且两个字符串中向后工作。
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;
}
不隶属于 StackOverflow