0

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

我正在尝试使用 stringstream (名为 ss )将一些字符串转换为整数,而将一些字符串转换为 double 等,但是这些值都出现了错误。我有一个名为 vec 的字符串向量,初始化如下:
[0] = ID # in hex
[1] = phone number
[2] = last name
[3] = first name
[4] = sales number
[5] = percent销售额
现在我遍历向量并将值放入 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

4

2 回答 2

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;
于 2012-06-20T21:30:20.747 回答
1

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

于 2012-06-20T22:38:07.310 回答