我正在编写一个从文件中获取多项式表达式的程序,然后使用提供的变量求解多项式。示例:
f(5.0)= 7x ^ 2 - 9
所以基本上我通过执行以下方式逐行提取文件:
string line;
getline(inputfile,line);
现在,我需要在f中获取变量(在本例中为5)并将其设置为等于我命名变量的float。我知道atof(我正在使用minGW 4.9.2 [我的编程课程需要])所以我不能使用stof。我目前尝试提取这个浮点数看起来像这样:
float variable;
for(int i = 0; i<line.length(); i++) {
if(isdigit(line[i]) {
variable = atof(line[i]) // THE ERROR IS HERE
break; // so we only get the first digit
}
}
我迷失在这里,不知道该怎么做。我只需要将5.0(或其任何可能)设置为等于我的变量float。任何帮助表示赞赏。
答案 0 :(得分:2)
它可能对你的意图负责。
string str = "f(5.0) = 7x^2 – 9";
string startDEL = "(";
string stopDEL = ")";
unsigned first = str.find(startDEL);
unsigned last = str.find(stopDEL);
string strNew = str.substr (first+1,last-first-1);
std::cout << << atof(strNew.c_str()) << std::endl;
答案 1 :(得分:1)
您可以使用std::streamstream
,这样您就可以将std::string
视为一个流:
std::string str;
std::getline(inputfile, str);
std::istringstream is(str);
float f, char x, char op, float second_var;
is >> f >> x >> op; >> second_var; // Read 7, then x, then ^, then 2.
答案 2 :(得分:0)
也许最短的解决方案是使用std :: stringstream:
char dummy;
double variable;
std::stringstream("f(5.2) = 7x^2-9") >> dummy >> dummy >> variable;
这会将前两个字符读入dummy,将以下数值读入变量。
您必须#include <sstream>
才能使用std :: stringstream。
答案 3 :(得分:-1)
尝试strtof而不是atof(),因为atof()返回一个double而不是float