我有一個字符串,其中包含許多不同的字符,類似於:「$:」「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. 可能會損失精度;從字符串中提取字符
- 8. 如何從文本文件中提取精確的字符串
- 9. 從UITextField中取出字符串並將其用作雙精度
- 10. 當從串聯到字符串連接時從雙精度到浮點精度?
- 11. 從字符串中提取文本
- 12. Python - 從字符串中提取文本
- 13. Python:從字符串中提取文本
- 14. 從Java中提取文本字符串
- 15. 從字符串中提取文本
- 16. 從文本中提取字符串
- 17. 從字符串中提取文本Java
- 18. 將字符串轉換爲雙精度,
- 19. 將字符串轉換爲雙精度
- 20. 將字符串轉換爲雙精度?
- 21. 轉換精度雙爲字符串
- 22. 從文件中讀取雙精度
- 23. 試圖從文本字段中讀取格式化的雙精度值
- 24. 將字符串轉換爲PHP中的雙精度值
- 25. 解析字符串中的雙精度值
- 26. 從java中的文本文件中讀取雙精度
- 27. 如何將雙精度值轉換爲字符串值
- 28. 如何將6020494385.89982字符串值轉換爲雙精度值
- 29. 按雙精度值排序而不是字符串值
- 30. Spring:將可空字符串值轉換爲雙精度值
嘗試正則表達式在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