我正在编写一个简单的直线计算器。例如,用户可以输入两个方程(字符串),例如 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/