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)
你有很多选择.这些都有不同的方法来检查输出的有效性.如果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)
| 归档时间: |
|
| 查看次数: |
4617 次 |
| 最近记录: |