在std::stringstream中用破折号对齐字符串

Align a string with dashes in std::stringstream

本文关键字:破折号 对齐 字符串 std stringstream      更新时间:2023-10-16

我正试图将一组数字写入字符串流,如下所示:

SOME_TEXT    12-23-43    SOME_OTHER_TEXT

12-23-43是用破折号('-')分割的三个数字,数字可以是1或2位数(如1-2-3或12-1-47,因此整个集合的长度不同)。整个字符集应该向左对齐,包含空格在内的12个字符。当我尝试应用std::left操纵符时,它只适用于第一个数字。我该怎么做呢?

下面是使用另一个ostringstream的示例:

#include <iostream>
#include <sstream>
#include <iomanip>
int main()
{
  std::ostringstream oss1;
  oss1 << 5 << "-" << 31 << "-" << 6;
  std::ostringstream oss;
  oss << "SOME_TEXT    " << std::setw(12) << std::left << oss1.str() << "SOME_OTHER_TEXT";
  std::cout << oss.str() << std::endl;
  return 0;
}

让它与sprintf工作,我很惊讶,虽然它不能与stringstream:

char buffer[12];
sprintf(buffer, "%d-%d-%d", n1, n2, n3);            
output << std::setw(12) << std::left << buffer;