用'0'c ++填充stringstream变量的右侧

时间:2012-07-20 19:54:23

标签: c++

我有下一个代码:

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

没有零?发生了什么事?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

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

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

如果您想要以不同方式填充,只需添加方向操纵器,如std::leftstd::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

答案 2 :(得分:0)

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