1

最近、私はファイナルのスニペットを書くことに取り組んでいます。一般的なタスクの 1 つは、文字列 (std::string) を単語に分割することです。場合によっては、これらの文字列に整数を含めることができます。

私はスニペットを書きました:

#include <sstream>
#include <iostream>
#include <vector>
using namespace std;

int main(void)
{
string str="23 005 123";
vector<int>myints;
istringstream iss(str);

string word;

while(iss>>word)
{
    int a;
    istringstream(word)>>a;
    myints.push_back(a);
}

for (vector<int>::iterator it=myints.begin();it!=myints.end();++it)
    cout<<*it<<" ";

} 

問題はありますが、動作します。005 ではなく str から 5 を取得しました。VC++ はすべてのゼロを縮小しているようです。(string.h/cstring の strtok ではなく) C++ 関数のみを使用して回避するにはどうすればよいですか?

MS VC++2008 と gcc の両方で入手できます。

ありがとう!

4

1 に答える 1

2

入力から先行ゼロの数を記憶し、後で正確に同じ数の先行ゼロで出力する必要がある場合、唯一のオプションint. たとえば、 を に変えることができvector<int>ますvector<string>

vector< pair<int,string> >または、元の文字列表現とともに必要な整数を保持するa を使用することもできます。

最後に、入力にあった先行ゼロの実際の数は気にせず、単にすべてを先行ゼロでパディングして同じ長さにしたい場合は、setfillandを使用できsetwます。

cout << setfill('0') << setw(5) << 25;
于 2013-03-07T18:58:19.210 に答える