c++ - 如何正确使用 std::stod

标签 c++

我正在编写一个简单的直线计算器。例如,用户可以输入两个方程(字符串),例如 y=5x+3 和 y=-3x+6。这个计算器最基本的特点是它会返回这两条线的交点。

我似乎无法弄清楚的障碍是如何将字符串解析为两个数据:斜率和 y 轴截距。这是一个简单的计算器,所以两行的格式都是 y=mx+b,但是,斜率和/或 y 轴截距都可以是非整数(即 float )。

我在字符串库中遇到了一个名为 stod 的函数,它将字符串中的数字转换为数值(我理解正确吗?)。

http://www.cplusplus.com/reference/string/stod/

我的问题是,这个函数能完成这项工作吗?如果是这样,我究竟如何使用“idx”参数?不太明白。

如果这行不通,我该如何解析这个用户输入的数据?

  • 两个方程都是字符串(y=mx+b)
  • m和b有私有(private)变量,专门存储十进制值(即double m_和double b_是私有(private)成员变量)

最佳答案

idx 参数是这样工作的:

#include <string>
#include <iostream>

int main(void)
{
    std::string data = "y=5.9568x+3.14"; //say you have a string like this..

    double y, x, m, b;
    y = 0;
    x = 0;

    std::size_t offset = 0; //offset will be set to the length of characters of the "value" - 1.
    m = std::stod(&data[2], &offset); //So we want to get the value "5.9568
    b = std::stod(&data[offset + 3]); //When we reach this line, offset has a value of 6

    std::cout<<b;
    return 0;
}

那么现在您要问为什么它的值为 6?好吧,因为:

5.9568 恰好是:6 个字符的长度。因此在我们做的下一行

b = std::stod(&data[offset + 3]);

我们实际上给它提供了一个指向 x + 3.. 地址的指针,结果恰好在 3.14 的开头。

换句话说,它等同于:

std::stod(&data[9]);

所以 idx 参数实际上是字符串中 double in 字符的索引/长度。如果字符串是:

str = "3.14159"

然后 std::stod(str, &idx) 将使 idx 等于:6。

如果字符串是:

str = "y = 1024.789" 然后 std::stod(&str[4], &idx) 将使 idx 等于:8 STARTING FROM &str[4] ..

关于c++ - 如何正确使用 std::stod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26008321/

相关文章:

c++ - 是否可以在宏中设置预处理器条件?

c++ - 调用函数并向其传递限制限定指针是否危险?

C++ 处理被零除的最佳方法

c++ - 二叉搜索树中是否需要结构

c++ - 查找 vector 中小于阈值(复杂性)的所有数字

c++ - 必须在 QWidget 之前构造 QApplication

c++ - 升级到VS2012导致由于VC++运行时不同而崩溃?

c++ - C++计算器,带空格和不带空格的读取输入

c++ - 无法将 CLion 链接到 Windows 10 上的 QT

c++ - 在 C++ 中使用包装整数作为索引?