【发布时间】:2020-10-16 11:58:09
【问题描述】:
我需要将数据从文件转换为双精度数据,有时数据格式为:
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的意思一样吗?您从哪里获得这些数据?
-
已确认,它确实意味着 E。此数据来自量子化学包 MOLPRO。我可以用 E 替换 D 并让标准转换函数处理其余部分...
-
@JohnFilleau Fortran 使用 D 而不是 E。参见 Scientific
dnotation not read in C++ -
是的,完全正确。 MOLPRO 是用 FORTRAN 编写的,感谢您的链接!
-
回复:“希望有更优雅的策略”——良好的直觉。正则表达式很少适用。我用一只手就能数出我在 StackOverflow 上看到的有关正则表达式的问题的数量,其中正则表达式实际上是最好的解决方案。
标签: c++ regex string double data-conversion