单词划分与零错误

时间:2013-03-07 18:53:37

标签: c++ string istringstream

最近我一直在为我的决赛写片段。常见的任务之一是将字符串(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得到5而不是005.似乎VC ++缩小了所有的零。如何避免使用C ++函数(不是来自string.h / cstring的strtok)?

我在MS VC ++ 2008和gcc上都得到了它。

谢谢!

1 个答案:

答案 0 :(得分:2)

如果您需要记住输入中前导零的数量并在之后使用完全相同数量的前导零打印它,则唯一的选项是存储为int。例如,您可以将vector<int>转换为vector<string>

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

最后,如果您不关心输入中的前导零的实际数量,但只是希望所有内容都用前导零填充到相等的长度,则可以使用setfill和{{1 }}:

setw