将字符串转换为double c ++

Abb*_*bie 1 c++ string double type-conversion ifstream

这段代码读取了我在.txt文件中的一些数据的第一行,第一行的值是'6.0',我在循环中读取其余的数据,我的问题是如何转换'line'(a字符串)到一个double(我会称之为'实例'),以便我以后可以在程序中使用它?它需要是一个双倍,所以我可以稍后用其他双重类型进行一些计算.可能是一个非常简单的解决方案,提前谢谢.

注意:我尝试过使用:

#include <stdlib.h>
double instances = atof(line.c_str());
Run Code Online (Sandbox Code Playgroud)

但它返回0而不是正确的值'6.0'

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{ 
    string line;
    ifstream infile ("data2.txt");
    if (infile.is_open())
    { 
        getline (infile,line);    
        cout << line << '\n';
        infile.close();
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

Bar*_*rry 8

你有很多选择.这些都有不同的方法来检查输出的有效性.如果line不包含a double,有些会抛出异常,有些会给出你可以检查的返回值.无论哪一个最适合您,完全取决于您的计划.

C++ 11介绍std::stod:

double instances = std::stod(line);
Run Code Online (Sandbox Code Playgroud)

在此之前,有一个令人困惑的名字std::atof仍然返回double:

double instances = std::atof(line.c_str());
Run Code Online (Sandbox Code Playgroud)

或者您可以使用std::istringstream's operator>>来提取double:

std::istringstream iss(line);
double instances;
iss >> instances;
Run Code Online (Sandbox Code Playgroud)

或者您可以使用std::sscanf:

double instances;
std::sscanf(line.c_str(), "%lf", &instances);
Run Code Online (Sandbox Code Playgroud)

或者您可以使用Boost.Lexical_Cast:

double instances = boost::lexical_cast<double>(line);
Run Code Online (Sandbox Code Playgroud)