我需要将数据从文件转换为 double 文件,有时数据的格式为:
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
替换为std::replace
,之后很简单:
Live demo
std::string s = "0.3387000000D+02";
std::replace( s.begin(), s.end(), 'D', 'E');
std::cout << std::stod(s);
或std::replace_if
:Live demo
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
关于c++ - 将奇怪的字符串转换为双C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62585310/