2013-03-07 27 views
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<<" "; 

} 

它的工作原理,但有一個問題。我從str而不是005得到了5個。似乎VC++縮小了所有的零。如何避免它只使用C++函數(而不是string.h/cstring中的strtok)?

我在MS VC++ 2008和gcc上都能找到它。

謝謝!

回答

2

如果你需要記住從輸入前導零的數目,後來與相同數量的前導零的打印,唯一的選擇就是存儲爲int。例如,您可以將您的vector<int>變成vector<string>

或者,您可以使用vector< pair<int,string> >,它保留您想要的整數以及原始字符串表示形式。

最後,如果你不關心那名輸入前導零的實際數量,而只是希望一切與前導零長度相等被填充,可以使用setfillsetw

cout << setfill('0') << setw(5) << 25; 
+0

非常感謝,它的工作原理! – ka2m 2013-03-08 06:57:55