Truncating with setw

2019-08-18 14:45发布

Is there a way that I can force setw to truncate?

Say that I want to get the output:

blah blah blee le
bu blah blah blee

Is there a way to make this work:

string foo{"bu blah blah blee le"};

cout << setw(foo.size() - 3) << foo.data() + 3 << setw(foo.size() - 3) << foo << endl;

2条回答
霸刀☆藐视天下
2楼-- · 2019-08-18 15:22

No, not really.

You can switch to unformatted output for this example, though:

assert(foo.size() > 3);
cout.write(&foo[3], foo.size() - 3);
cout.write(&foo[0], foo.size() - 3);
查看更多
Explosion°爆炸
3楼-- · 2019-08-18 15:29

Not directly.

In the printf format specifiers, the precision argument could be used to specify the maximum number of characters from a string. In C++, however, you use the substring operator:

std::cout << foo.substr(3) << foo.substr(0, foo.size() - 3) << std::endl;

(Of course, for the first, you could also use foo.c_str() + 3.)

查看更多
登录 后发表回答