You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从字符串中提取浮点数?C++实现代码运行异常求助

问题描述

我尝试从字符串中提取浮点数,提取完成后将这些浮点数保存到数组中。
以下是我找到的一段参考代码,尽管我已经做了必要的修改,但它仍然无法正常运行:

#include <iostream>
#include <string>
using namespace std;

string a="2,134 43,54 22,334";
string b[30];

int found,i=0;
while(a!="\0"){
found=a,find("\t");
for(int f=0;f<found;f++){
b[i]+=a[f];
}
a.erase(0,found+1);
i++;
}
for(int d=0;d<i;d++){
cout<<b[d]<<endl;
}
return 0;
}
代码存在的问题
  • 语法错误:调用string的find方法时误用了逗号运算符,正确写法是用点号调用成员:found = a.find("\t");
  • 分隔符不匹配:测试字符串里的数值是用空格分隔的,代码里查找的是制表符\t,永远匹配不到目标,find会返回无效位置值string::npos,后续erase操作直接内存越界崩溃
  • 循环逻辑错误:判断字符串是否为空应该用a.empty()方法,直接和"\0"比较的逻辑不符合C++ string的判断规则
  • 结构错误:所有执行语句都写在了全局作用域,C++要求可执行逻辑必须放在函数内部,代码缺失main函数包裹,根本无法编译
  • 类型错误:需求是存储浮点数,代码里定义的数组b是string类型,且字符串里的浮点数用逗号做小数分隔符,直接转数值会识别失败
  • 边界处理缺失:没有处理最后一个数值后面没有分隔符的情况,拆分到最后一段时会直接异常
修正后可运行代码
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main() {
    string a = "2,134 43,54 22,334";
    vector<double> res;
    size_t pos;

    // 先统一把逗号小数点替换为标准点号,方便后续转浮点数
    for (char& ch : a) {
        if (ch == ',') ch = '.';
    }

    while (!a.empty()) {
        pos = a.find(" ");
        string tmp;
        if (pos == string::npos) {
            // 已经是最后一个数值
            tmp = a;
            a.clear();
        } else {
            tmp = a.substr(0, pos);
            a.erase(0, pos + 1);
        }
        res.push_back(stod(tmp));
    }

    // 输出验证
    for (double num : res) {
        cout << num << endl;
    }
    return 0;
}
运行输出
2.134
43.54
22.334

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 08:24:21