如何分割双精度格式字符串并转换为float数组?
将科学计数法格式字符串转换为float数组的C++实现
以下是直接可用的解决方案代码,包含字符串分割、科学计数法转换和错误处理逻辑:
#include <string> #include <vector> #include <sstream> #include <iostream> int main() { std::string str = "7.13566982194977e-15,1.639519203260036e-43,4.149314136725479e-8,7.987401246651457e-44,7.11674964700695e-15,1.639519203260036e-43,4.515206005147025e+27"; std::vector<float> result; // 按逗号分割字符串并逐个转换 std::stringstream ss(str); std::string token; while (std::getline(ss, token, ',')) { try { // std::stof原生支持解析科学计数法格式 float val = std::stof(token); result.push_back(val); } catch (const std::invalid_argument&) { // 跳过格式错误的无效字符串 continue; } catch (const std::out_of_range&) { // 跳过超出float范围的数值 continue; } } // 验证转换结果(可选) for (float num : result) { std::cout << num << "\n"; } return 0; }
关键逻辑说明
- 字符串分割:借助
std::stringstream和std::getline,以逗号为分隔符提取每个独立的数值字符串。 - 科学计数法转换:
std::stof函数原生支持解析e/E格式的科学计数法字符串,无需额外处理。 - 错误处理:捕获两种常见异常,避免因无效格式或数值溢出导致程序崩溃,可根据需求调整错误处理逻辑(如记录日志)。
注意事项
float类型仅能保留约6-7位有效数字,原字符串中超出该范围的精度会被截断,这是float的固有特性。若需要更高精度,可改用std::vector<double>并调用std::stod转换。
内容的提问来源于stack exchange,提问作者bakboem
相关产品推荐
相关产品推荐

