我想分开一个数字列表,例如:34,45,12.3,100,34.6,50
只有在没有这样的小数的情况下我才能这样做:
#include <vector>
#include <string>
#include <sstream>
#include <iostream>
int main()
{
std::string str = "34,45,12.3,100,34.6,50";
std::vector<int> vect;
std::stringstream ss(str);
int i;
while (ss >> i)
{
vect.push_back(i);
if (ss.peek() == ',')
ss.ignore();
}
for (i=0; i< vect.size(); i++)
std::cout << vect.at(i)<<std::endl;
}
这里的问题是小数。以上将产生:
34 45 12 3 100 34 6 50
虽然它应该产生:
34 45 12.3 100 34.6 50
基本上是上面的代码,当它看到一个点'.'
时,它就好像是一个逗号。
有什么想法吗?
答案 0 :(得分:3)
您应该使用float并将代码更改为使用float而不是int:
#include <vector>
#include <string>
#include <sstream>
#include <iostream>
int main()
{
std::string str = "34,45,12.3,100,34.6,50";
std::vector<float> vect;
std::stringstream ss(str);
float i;
while (ss >> i)
{
vect.push_back(i);
if (ss.peek() == ',')
ss.ignore();
}
for (i=0; i< vect.size(); i++)
std::cout << vect.at(i)<<std::endl;
}
答案 1 :(得分:3)
您应该声明float i
而不是int i
,并将向量声明为浮点数的向量,而不是整数向量。这是因为12.4不是整数,而是浮点数。
答案 2 :(得分:1)
我认为你的代码将12.3解释为两个不同的数字,因为你没有将这个数字声明为浮点数。向量将所有字符串保存为整数,而不是浮点数。如果你将向量声明为浮点数而不是整数,那么你的问题应该得到解决