【问题标题】:Dividing in words works incorrectly with zeroes用词除以零不正确
【发布时间】:2013-03-07 18:53:37
【问题描述】:

最近我一直在为我的期末考试编写 sn-ps。其中一项常见任务是将字符串 (std::string) 划分为单词。在某些情况下,这些字符串可以包含整数。

我写了一个sn-p:

#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 上都得到了它。

谢谢!

【问题讨论】:

    标签: c++ string istringstream


    【解决方案1】:

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

    或者,您可以使用vector&lt; pair&lt;int,string&gt; &gt;,它将您想要的整数与原始字符串表示形式一起保留。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多