C ++:将字符串修剪为单个字符,然后将该字符串转换为浮点数

时间:2016-11-16 04:32:13

标签: c++ c++11

我正在编写一个从文件中获取多项式表达式的程序,然后使用提供的变量求解多项式。示例:

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。任何帮助表示赞赏。

4 个答案:

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