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::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
于 2012-07-20T20:09:49.863 に答える
0

setw() マニピュレータは負の数で呼び出されます (インデックス文字列の長さはちょうど 4 です)。それが犯人かもしれません。

于 2012-07-20T19:58:52.917 に答える