0
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但我仍然不知道如何修改上面给出的代码。

谢谢你的建议!

4

3 回答 3

4

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();
于 2013-04-29T10:00:11.930 回答
1

虽然插入有问题的文本应该不会太难,但一旦你得到正确的大小(使用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否则,计算会给出错误的结果。

于 2013-04-29T11:05:14.903 回答
0

请参阅此处的文档

只需通过以下方式更正最后一条指令:

out.insert(a," ",(70-a-b<70)?(70-a-b):70);
于 2013-04-29T10:14:26.737 回答