0

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;
Jonathan Mee
  • 37,899
  • 23
  • 129
  • 288

2 Answers2

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);
Lightness Races in Orbit
  • 378,754
  • 76
  • 643
  • 1,055
1

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

James Kanze
  • 150,581
  • 18
  • 184
  • 329