Truncating with setw

2019-08-18 15:39发布

问题:

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;

回答1:

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);


回答2:

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.)