从特定字符串中取出双打

时间:2016-02-17 18:40:28

标签: c++ parsing c++11

我的所有字符串都将被格式化,例如

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 中止

1 个答案:

答案 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

我们甚至可以确定提取部分的范围,以便临时stringstringstream仅用于提取

{
    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.

如果你不喜欢这样的免费范围,你也可以将它作为一个函数。