单词的除法与零不正确

Dividing in words works incorrectly with zeroes

本文关键字:不正确 除法 单词      更新时间:2023-10-16

最近我一直在为期末考试写代码片段。常见的任务之一是将字符串(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++函数(不是strtok从string.h/cstring)?

我得到它在MS vc++ 2008和gcc。

谢谢!

如果您需要记住输入中的前导零的数目,并稍后使用完全相同的前导零数目打印它,那么唯一的选择是而不是存储为int。例如,你可以把你的vector<int>变成vector<string>

或者,您可以使用vector< pair<int,string> >,它将您想要的整数与原始字符串表示形式保持在一起。

最后,如果您不关心输入中前导零的实际数目,而只是希望所有内容都用前导零填充以使其长度相等,则可以使用setfillsetw:

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