我需要将数据从文件转换为双精度数据,有时数据采用以下形式:
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
,替换为E
with 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] 删除。
我来说两句