我的所有字符串都将被格式化,例如
std::string templine;
templine = "vertex 4.5 2.2 1";
某种东西。当然会输入不同的双打,但顶点总是在那里
我试过stod
,但我不知道该怎么做。
只是为了测试它我做了这个:
std::string orbits = "Vertex 4.5 2.3 5";
double x,y,z;
std::size_t offset = 0;
z = std::stod(&orbits[7], &offset);
y = std::stod(&orbits[offset+2]);
x = std::stod(&orbits[offset+2]);
std::cout << "z " << z << std::endl;
std::cout << "y " << y << std::endl;
std::cout << "x " << x << std::endl;
它给了我这个错误
在抛出&#39; std :: invalid_argument&#39;的实例后终止调用 what():stod 中止
答案 0 :(得分:3)
处理此问题的一种简单方法是将字符串加载到std::stringstream
中,然后使用其operator >>
提取不同的部分。在示例中,我使用一个名为eater
的虚拟字符串,用于从字符串中提取"Vertex"
部分。
std::stringstream ss(orbits)
std::string eater;
ss >> eater; //consumes "Vertex"
ss >> x >> y >> z; // gets the doubles
我们甚至可以确定提取部分的范围,以便临时string
和stringstream
仅用于提取
{
std::stringstream ss(orbits)
std::string eater;
ss >> eater; //consumes "Vertex"
ss >> x >> y >> z; // gets the doubles
}
// now ss and eater are gone and x, y and z are populated.
如果你不喜欢这样的免费范围,你也可以将它作为一个函数。