在 C++ 中将字符串转换为双精度

Posted

技术标签:

【中文标题】在 C++ 中将字符串转换为双精度【英文标题】:Converting string to double in c++ 【发布时间】:2015-04-24 15:08:17 【问题描述】:

我创建了一个函数,它接收一行和一个分隔符,分隔行并返回一个浮点向量(如 java 中的 split 函数)。 这是函数:

vector<float> extractNumbers(string line, char delimiter) 
    vector<float> a;
    float f;
    string forNow = "";
    for (unsigned int i = 0; i < line.size(); i++) 
        if (line.at(i) == delimeter) 
            f = ::atof(forNow.c_str());
            cout << ::atof(forNow.c_str()) << endl;
            a.push_back(f);
            forNow = "";
         else 
            forNow += line.at(i);
        
    
    f = ::atof(forNow.c_str());
    cout << f << endl;
    a.push_back(f);
    return a;

这是我正在尝试的文本文件:

3 3
1 1 1
1 2 1
1 1 1

我调用这个函数:vector&lt;float&gt; floatLine = extractNumbers(line, ' '); 当我尝试打印 forNow 参数时,我收到的数字就像在文本中一样,但是当我打印 f::atof(forNow.c_str()) 时,我收到的是 0 而不是第一行中的前 3。 有什么想法吗?

【问题讨论】:

为什么这么复杂?为什么不改用std::istream&amp; operator&gt;&gt;(std;;istream,double) 输入运算符? 我不知道这个操作符.. 怎么用? 这是一个很好的参考,包括示例:en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt 您可以将它与您从line 参数创建的std::istringstream 结合使用。 @JaviDorfsman 也许如果你用这个文件写你想做什么会更好。 在ideone.com/X0rwvB 工作正常。 【参考方案1】:

如果您不知道这种与文件交互的便捷方式。你可以像这样使用它们:

float a, b;
float c, d, e;
float f, g, h;
fstream file("data.dat", ios::in);
if (file) 
    file >> a >> b;
    file >> c >> d >> e;
    file >> f >> g >> h;
    file.close();

【讨论】:

以上是关于在 C++ 中将字符串转换为双精度的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 C++ 中将字符串转换为双精度时遇到分段错误

如何在 C++ 中将字符串转换为双精度值?

在 C# 中将字符串转换为双精度

在 vc++ 中将字符串转换为双精度

在 PHP 中将字符串转换为双精度

在java中将十六进制数字字符串转换为双精度数字