[已解决]请参阅下面的答案。
我正在尝试使用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
答案 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时,一切正常。