int a=sizeof(out);
int b=sizeof(s2);
out+=s2;
out.insert(a,(70-a-b)," ");
out 和 s2 是字符串。我想在两个字符串之间添加一些空格字符并使总长度为 70。VS 想要“const char *”作为第二个参数。我读过C++: insert char to a string但我仍然不知道如何修改上面给出的代码。
谢谢你的建议!
int a=sizeof(out);
int b=sizeof(s2);
out+=s2;
out.insert(a,(70-a-b)," ");
out 和 s2 是字符串。我想在两个字符串之间添加一些空格字符并使总长度为 70。VS 想要“const char *”作为第二个参数。我读过C++: insert char to a string但我仍然不知道如何修改上面给出的代码。
谢谢你的建议!
out 和 s2 是字符串。我想在两个字符串之间添加一些空格字符并使总长度为 70。
首先, sizeof 在这里是错误的运算符。你需要
int a = out.size();
int b = s2.size() ;
做你想做的一种选择是
int spaceCount = 70-a-b;
out += string(spaceCount, ' ') + s2;
另一种选择是使用 setw:
ostringstream resultSS;
resultSS << out << setw(70-out.size()) << right << s2;
out = resultSS.str();
虽然插入有问题的文本应该不会太难,但一旦你得到正确的大小(使用a.size()
and b.size()
),我怀疑这是否是最好的解决方案。我可能会在附加out
之前
附加必要的填充s2
。就像是:
int padding = 70 - (asInt( out.size() ) + asInt( s2.size() ) );
if ( padding > 0 ) {
out.append( padding, ' ' );
}
out.append( s2 );
额外的测试是必要的,因为std::string
使用无符号类型 ( size_t
) 作为大小,而 C++ 中的无符号类型往往会导致一些令人惊讶的结果。(asInt
可能需要也可能不需要,具体取决于字符串的来源。它们基本上是:
int
asInt( size_t original )
{
if ( original > std::numeric_limits<int>::max() ) {
throw std::range_error( "size too large for int" );
return static_cast<int>( original );
}
在许多情况下,您会知道字符串不能太长,然后才能到达代码中的这一点,因此您不需要它们。
请注意,在计算填充之前,您必须将大小转换为(或其他一些有符号类型)。int
否则,计算会给出错误的结果。