8

我有下一个代码:

ofstream dataIndex;
dataIndex.open("file");

index="2222";
std::stringstream sstr1;
sstr1<<index<<'1';
sstr1<<setfill('0')<<setw(index.length()-9);
string index1= sstr1.str();
dataIndex<<index1;

dataIndex.close()

我希望结果:

2222100000

但只有我得到

22221

没有零?发生了什么?

4

3 回答 3

11

用于std::left左对齐输出

#include <iostream>
#include <string>
#include <iomanip>

int main() 
{
  std::string s( "2222" );

  std::cout << std::setw(9) 
            << std::setfill('0') 
            << std::left 
            << s 
            << std::endl;
}

输出:

222200000
于 2012-07-20T20:08:07.733 回答
5

操纵器与输入一样应用于流。要使它们生效,首先需要应用它们。例如,这里是您如何在字符串流上填充零。

std::string index("2222");
std::ostringstream sstr1;
sstr1 << std::setw(9) << std::setfill('0') << index << '1';
std::cout << sstr1.str(); // 0000022221

如果您想以不同的方式填充,则只需添加一个方向操纵器,如std::left,std::right等。

std::string index("2222");
std::ostringstream sstr1;
sstr1 << index << std::setw(10-index.length()) << std::setfill('0') << std::left << '1';
std::cout << sstr1.str(); // 2222100000
于 2012-07-20T20:09:49.863 回答
0

您的 setw() 操纵器使用负数调用(索引字符串的长度仅为 4)。这可能是罪魁祸首。

于 2012-07-20T19:58:52.917 回答