问题
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
.)
来源:https://stackoverflow.com/questions/27380376/truncating-with-setw