我有一个字符串,其中包含许多不同的字符,类似于:“$:”“213.23453” 如何提取double值213.23453并将其存储在变量中,它是C++/C我不能使用lambdas。从文本字符串中提取双精度值
1
A
回答
1
可以使用sscanf
功能的“穷人的正则表达式”跳过字符之前的第一个数字,然后读双,这样的:
char *str = "\"$: \" \"213.23453\"";
double d;
sscanf(str, "%*[^0-9]%lf", &d);
注意第一百分比后面的星号格式:它指示sscanf
读取字符串而不将其内容写入输出缓冲区。
0
使用正则表达式。
[$]?[0-9]*(\.)?[0-9]?[0-9]?
这应该与那些有$符号和那些没有。
Boost.Regex是一个很好的正则表达式库
就个人而言,我觉得Boost.Xpressive好得多的工作。它是一个只有头文件的库,它有一些很好的功能,例如静态正则表达式(在编译时编译的正则表达式)。
如果您使用的是C++ 11兼容编译器,请使用std::regex,除非您有充分理由使用其他内容。
+1
但是,请注意,虽然使用GCC 4.7编译的'std :: regex'很好,但它实际上非常不正常。 – 2013-03-19 11:49:22
0
纯C++解决方案可以是手动切断的数目(由std::isdigit
识别的第一数位)之前的垃圾字符,然后只是构造一个临时istringstream
对象来检索double
从:
std::string myStr("$:. :$$#&*$ :213.23453$:#$;");
// find the first digit:
int startPos = 0;
for (; startPos < myStr.size(); ++startPos)
if (std::isdigit(myStr[startPos])) break;
// cut off the trash:
myStr = myStr.substr(startPos, myStr.size() - startPos);
// retrieve the value:
double d;
std::istringstream(myStr) >> d;
但C-风格sscanf
与指定适当的格式将在这里以及:)
相关问题
- 1. Swift - 从字符串中提取双精度值
- 2. 从字符串中提取数字(如整数或双精度)
- 3. 从字符串数组中获取第一个双精度值
- 4. 从文件中读取字符串和双精度的组合
- 5. 可能会损失精度;从字符串中提取字符
- 6. 如何从文本文件中提取精确的字符串
- 7. 从UITextField中取出字符串并将其用作双精度
- 8. 当从串联到字符串连接时从双精度到浮点精度?
- 9. 从文本中提取字符串
- 10. Python:从字符串中提取文本
- 11. 从字符串中提取文本Java
- 12. 从字符串中提取文本
- 13. Python - 从字符串中提取文本
- 14. 将字符串转换为双精度,
- 15. 将字符串转换为双精度
- 16. 试图从文本字段中读取格式化的双精度值
- 17. 解析字符串中的双精度值
- 18. 从java中的文本文件中读取双精度
- 19. 如何将6020494385.89982字符串值转换为双精度值
- 20. 按双精度值排序而不是字符串值
- 21. 提取值从字符串
- 22. Powershell从字符串中提取未知长度的文本
- 23. 从控制台读取双精度值
- 24. 从C中的字符串解析多个双精度#
- 25. 将子字符串从输入文件转换为双精度值?
- 26. PHP:sscanf从双引号内的字符串中提取值
- 27. 从字符串的PHP文本提取
- 28. round QDec双精度值,最多两个字符的精度
- 29. 双精度值
- 30. 如何从C++中的文件中读取双精度值
尝试正则表达式在cpp – Prasad 2013-03-19 11:41:50
['stod'](http://en.cppreference.com/w/cpp/string/basic_string/stof) – 2013-03-19 11:49:01
您首先必须决定是否编写C或C++,因为这两种语言的答案是不同的。 – 2013-03-19 12:06:16