將std :: wstring轉換爲數字類型(如int,long,float或double)的最佳方式是什麼?如何將std :: wstring轉換爲數值類型(int,long,float)?
回答
#include <boost/lexical_cast.hpp>
std::wstring s1(L"123");
int num = boost::lexical_cast<int>(s1);
std::wstring s2(L"123.5");
double d = boost::lexical_cast<double>(s2);
這將拋出一個異常boost::bad_lexical_cast
如果字符串不能轉換。
另一種選擇是使用升壓齊(Boost.Spirit子文庫):
#include <boost/spirit/include/qi.hpp>
std::wstring s1(L"123");
int num = 0;
if (boost::spirit::qi::parse(s1.begin(), s1.end(), num))
; // conversion successful
std::wstring s2(L"123.5");
double d = 0;
if (boost::spirit::qi::parse(s1.begin(), s1.end(), d))
; // conversion successful
使用齊比lexical_cast的快得多,但會增加你的編譯時間。
而人們聲稱C++是非常複雜的! – 2011-02-25 14:51:15
#include <sstream>
float toFloat(const std::wstring& strbuf)
{
std::wstringstream converter;
float value = 0;
converter.precision(4);
converter.fill('0');
converter.setf(std::ios::fixed, std::ios::floatfield);
converter << strbuf;
converter >> value;
return value;
}
最好?
如果你不希望使用任何超過CRT庫,並樂意與得到0如果字符串不能轉換,那麼你可以在錯誤處理,複雜的語法,包括標題由
std::wstring s(L"123.5");
float value = (float) _wtof(s.c_str());
保存
這一切都取決於你在做什麼。這是KISS的方式!
'_wtof'從哪裏來? – 2011-02-25 15:08:34
@david c運行時間(CRT)庫 – ravenspoint 2011-02-25 15:27:33
我沒有在C99標準或Harbison&Steele中看到它的參考。也許wcstod/wcstol/wcstoul會更好。 – 2011-02-25 15:50:12
的C++ 0x介紹followingfunctions在<string>
:
int stoi (const wstring& str, size_t* idx = 0, int base = 10);
long stol (const wstring& str, size_t* idx = 0, int base = 10);
unsigned long stoul (const wstring& str, size_t* idx = 0, int base = 10);
long long stoll (const wstring& str, size_t* idx = 0, int base = 10);
unsigned long long stoull(const wstring& str, size_t* idx = 0, int base = 10);
float stof (const wstring& str, size_t* idx = 0);
double stod (const wstring& str, size_t* idx = 0);
long double stold(const wstring& str, size_t* idx = 0);
idx
是任選空指針到轉換的內str
的端部(由轉換功能設定)。
所以我使用Embarcadero和那塊......沒有讓我使用stoi,所以我必須創建自己的功能。
int string_int(wstring lala){
int numero;
int completo = 0;
int exponente = 1;
int l = 1;
for (int i = 0; i < lala.size(); i++){
numero = 0;
for (int j = 48; j < 57; j++){
if (lala[i] == j){
break;
}
numero++;
}
for (int k = 0; k < lala.size() - l; k++){
exponente *= 10;
}
numero *= exponente;
completo += numero;
exponente = 1;
l++;
}
return completo;
}
只使用字符串流: 不要忘記#include <sstream>
wchar_t blank;
wstring sInt(L"123");
wstring sFloat(L"123.456");
wstring sLong(L"1234567890");
int rInt;
float rFloat;
long rLong;
wstringstream convStream;
convStream << sInt<<' '<< sFloat<<' '<<sLong;
convStream >> rInt;
convStream >> rFloat;
convStream >> rLong;
cout << rInt << endl << rFloat << endl << rLong << endl;
- 1. 將CString轉換爲std :: wstring
- 2. 將std :: wstring轉換爲SQLWCHAR *
- 3. 如何將std :: wstring轉換爲TCHAR *
- 4. 從int轉換爲long long
- 5. 如何將int []類型轉換爲int?[]
- 6. tgamma()long long類型轉換
- 7. 將int [2]轉換爲long
- 8. 如何將float轉換爲int - 類型轉換爲字符串格式?
- 9. 如何將long int轉換爲char
- 10. 不能轉換的boost ::拉姆達:: ...爲long long unsigned int類型
- 11. 將int轉換爲float?
- 12. 將float轉換爲int
- 13. Haskell將Float轉換爲Int
- 14. 將FLOAT轉換爲INT
- 15. 將Float轉換爲Int
- 16. JSON將float轉換爲int
- 17. 將int轉換爲float/double
- 18. 如何將int轉換爲float?
- 19. 如何將int轉換爲float?
- 20. Haskell:將Float轉換爲Int(平均值)
- 21. 將int轉換爲無符號long long
- 22. 將字符串轉換爲long long int
- 23. 如何將UTF-8 std :: string轉換爲UTF-16 std :: wstring?
- 24. 如何停止`ast.parse`將數值轉換爲int/float?
- 25. 如何將_variant_t數據類型轉換爲wstring
- 26. 將一個float類型轉換爲int時的未知行爲。
- 27. 將org.bytedeco.javacpp.Mat轉換爲Java int/float數組
- 28. 類型轉換爲無符號long long?
- 29. 從int,float,char,double的類型轉換
- 30. 如何將std :: basic_string類型轉換爲char類型的數組?
的可能重複(http://stackoverflow.com/questions [你如何轉換一個C++字符串爲int?]/200090/how-do-you-convert-ac-string-to-an-int) – 2011-02-25 15:47:26