将奇怪的字符串转换为双 C++

zstreet

我需要将数据从文件转换为双精度数据,有时数据采用以下形式:

0.3387000000D+02  0.6067999217D-02
0.5095000000D+01  0.4530799416D-01
0.1159000000D+01  0.2028219738D+00
0.3258000000D+00  0.5039029350D+00
0.1027000000D+00  0.3834209505D+00

你会如何处理处理D这里?

这是科学记数法,只是用D代替E

我正在考虑std::regex在这里使用,但希望有一个更优雅的策略。

类似于以下内容:

std::regex rr( "((\\+|-)?[[:digit:]]+)(\\.(([[:digit]]+)?))?(d|D)(( \\+|-)?)[[:digit:]]+)""?"); 
阿纳斯塔西奥

D,替换为Ewith std::replace, 之后就很简单了:

现场演示

std::string s = "0.3387000000D+02";
std::replace( s.begin(), s.end(), 'D', 'E');
std::cout << std::stod(s);

或者std::replace_if

现场演示

bool isD(char c) { 
    return c == 'D'; 
}
std::string s = "0.3387000000D+02";
std::replace_if( s.begin(), s.end(), isD, 'E');
std::cout << std::stod(s);

输出:

33.87

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章