Каков наилучший способ преобразования std :: wstring в числовой тип, например, int, long, float или double?Как преобразовать std :: wstring в числовой тип (int, long, float)?
ответ
Либо использовать boost::lexical_cast<>
:
#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
Использование Qi гораздо быстрее, чем lexical_cast, но увеличит ваше время компиляции.
И люди утверждают, что C++ является излишне сложным! –
Использование wstringstream/stringstream:
#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'? –
@ david Библиотека времени c (CRT) – ravenspoint
Я не вижу ссылки на нее ни в C99 Standard, ни в Harbison & Steele. Возможно, wcstod/wcstol/wcstoul будет лучше. –
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;
}
просто использовать stringstream: не забудьте #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. «long long = int + int» сначала вычислить, затем преобразовать тип?
- 2. Невозможно неявно преобразовать тип 'long' в "int?"?
- 3. Python-Как преобразовать аргумент функции в числовой оператор/float()/int()?
- 4. Как преобразовать std :: wstring в LSA_UNICODE_STRING
- 5. Как преобразовать std :: wstring в TCHAR *
- 6. Как мне преобразовать из std :: wstring _TCHAR []?
- 7. Как преобразовать тип данных _variant_t в wstring
- 8. Безопасно ли преобразовать std :: wstring в cstring?
- 9. Java - О float, long, int
- 10. Невозможно преобразовать float из long
- 11. Как преобразовать long в LPCWSTR?
- 12. std :: wstring in ChaiScript
- 13. Преобразование long int * в long long int *
- 14. Как преобразовать строку в тип int или float?
- 15. convert int to wstring
- 16. Java-тип casting - float (и long) to int
- 17. Ошибка в std :: wstring?
- 18. C: недействительные операнды в двоичные> (имеют 'float' и 'float (*) (float **, long int, long int, short int *)')
- 19. Как преобразовать long в int в Java?
- 20. конвертировать из float-point в пользовательский числовой тип
- 21. Android: Как получить/преобразовать long в int?
- 22. Преобразовать Float в Int Расхождение
- 23. Преобразование std :: wstring в SQLWCHAR *
- 24. Как преобразовать int в float в python?
- 25. Невозможно преобразовать в числовой тип данных (SSIS)
- 26. Как преобразование long long в int работает?
- 27. Как преобразовать из int в float?
- 28. Как преобразовать Float в Int когда необходимо?
- 29. Получение подстроки std :: wstring
- 30. C++ Как преобразовать std :: chrono :: time_point в long и back
возможный дубликат (http://stackoverflow.com/questions [Как преобразовать строку C++ с межд?]/200090/how-do-you-convert-ac-string-to-an-int) –