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 得到 5 而不是 005。似乎 VC++ 缩小了所有的零。如何仅使用 C++ 函数(而不是 string.h/cstring 中的 strtok)来避免它?

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

谢谢!

4

1 回答 1

2

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

Alternatively, you could use a vector< pair<int,string> >, which keeps the integer you want along with the original string representation.

Finally, if you don't care about the actual number of leading zeros that were in the input, but simply want everything to be padded with leading zeros to equal length, you can use setfill and setw :

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