stringstream不会转换为正确的数字值

时间:2012-06-20 21:14:18

标签: c++

[已解决]请参阅下面的答案。

我正在尝试使用stringstream(命名为ss)将一些字符串转换为int而一些字符串转换为double等等,但这些值都出错了。我有一个名为vec的字符串向量,初始化如下:
[0] =十六进制中的ID# [1] =电话号码
[2] =姓氏
[3] =名字
[4] =销售数量
[5] =销售额的百分比
现在我浏览向量并将值放入int,string或double:

std::string lname, fname, pnum;
int ID;
double sales, percent;

if(vec.size()!=6) {
    //throw exception
}
else {
    ss<<std::hex<<vec[0];
    ss>>ID;

    pnum = vec[1];
    lname = vec[2];
    fname = vec[3];

    ss<<vec[4];
    ss>>sales;

    ss<<vec[5];
    ss>>percent;
}

但是每个客户的输出都是这样的。什么是我的总是1和我的双打总是这个奇怪的数字?

客户:Langler Tyson 1 7667230284 2.12303e-314 2.12201e-314

2 个答案:

答案 0 :(得分:2)

您需要在数字之间引入一个分隔符才能将它们解压缩出来:

ss << vec[0] << " ";
ss >> ID;
ss << vec[4] << " ";
ss >> sales;
ss << vec[5] << " ";
ss >> percent;

除此之外,您需要在解压缩ID后恢复为原始的十进制格式:

ss << hex;
ss << vec[0] << " ";
ss >> ID;
ss << dec;

此外,因为您使用相同的ss流来提取向量元素,所以在提取最后一个向量元素之后,流的状态会出错。您需要在进一步插入/提取之前清除错误状态。使用新流也可以解决问题:

ss = stringstream();
ss << hex;
ss << vec[0] << " ";
ss >> ID;
ss << dec;
ss << vec[4] << " ";
ss >> sales;
ss << vec[5] << " ";
ss >> percent;

答案 1 :(得分:1)

我得到了它的工作。这是我的整个方法的截图:http://i.imgur.com/lFb87.png我认为,因为我使用ss加载向量,重用它来获取值导致问题。当我添加第二个stringstream ss2时,一切正常。