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

标签 c++ regex string double data-conversion

我需要将数据从文件转换为 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/

相关文章:

java - 正则表达式问题 - 引号内的文本 block 之外的一个或多个空格

python - 消极的展望会产生意想不到的结果

java - 如何在java中生成自定义长度的随机字母数字字符串?

string - 如何使用 Swift 2.0 将字符串转换为 float ?

c++ - 如何让编译器根据版本跳过一个函数?

c++ - 如何通过双击选择 QTableWidget 的行?

java - Youtube 完整的 Java 正则表达式

c++ - C++中数组和字符串的索引

c++ - Lua 从 C 函数返回自定义数据

c++ - 以相反顺序打印字符串输入