¿Cuál es la mejor manera de convertir std :: wstring al tipo numérico, como int, long, float o double?Cómo convertir std :: wstring a tipo numérico (int, long, float)?
Respuesta
De cualquier uso 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);
Estos arrojará una excepción boost::bad_lexical_cast
si la cadena no se puede convertir.
La otra opción es usar Boost Qi (una sub-biblioteca de 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
Usando Qi es mucho más rápido que lexical_cast pero aumentará su tiempo de compilación.
¡Y la gente dice que C++ es innecesariamente complejo! –
Uso 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;
}
¿Mejor?
Si no desea usar nada más que la biblioteca CRT, y está satisfecho con la obtención de 0 si la cadena no se puede convertir, entonces se puede ahorrar en la gestión de errores, la sintaxis compleja, incluyendo encabezados por
std::wstring s(L"123.5");
float value = (float) _wtof(s.c_str());
Todo depende de lo que esté haciendo. Esta es la manera de KISS!
¿De dónde viene '_wtof'? –
@david La biblioteca de tiempo de ejecución c (CRT) – ravenspoint
No veo ninguna referencia en el estándar C99 ni en Harbison & Steele. Tal vez wcstod/wcstol/wcstoul sería mejor. –
C++ 0x introduce el followingfunctions en <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
es un puntero opcionalmente nulo al final de la conversión dentro de str
(establecido por la función de conversión).
Así que estaba usando Embarcadero y esa pieza de ..... no me dejó usar stoi, así que tengo que crear mi propia función.
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;
}
sólo tiene que utilizar el stringstream: no se olvide de #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. Convertir CString a std :: wstring
- 2. std :: streampos, std :: streamoff y std :: streamsize a long long int?
- 3. ¿Puedo convertir long a int?
- 4. Cómo convertir long a int en .net?
- 5. Cómo convertir float a int en smarty
- 6. Cómo convertir CString y :: std :: string :: std :: wstring entre sí?
- 7. convertir int a std :: string
- 8. Convertir float a int en F #
- 9. C++: long long int vs. long int vs. int64_t
- 10. convertir std :: wstring a const * char en C++
- 11. Cómo convertir UTF-8 std :: string a UTF-16 std :: wstring?
- 12. impresión unsigned long long int Tipo Valor Devuelve resultados extraños
- 13. std :: wstring length
- 14. Tipo de clave principal: int vs long
- 15. Convertir float a char *
- 16. Convierta float a int en Objective-C
- 17. 'long long int' se interpreta como 'long int'. ¿Cómo puedo evitar esto?
- 18. Conversión de std :: wstring a QString lanza error de vinculador
- 19. Lua: convirtiendo de float a int
- 20. Lanzando un doble a otro tipo numérico
- 21. Cómo convertir int * a int
- 22. Convertir float a NSNumber
- 23. ¿Cómo inicializar e imprimir una std :: wstring?
- 24. Cómo convertir 'long long' (o __int64) a __m64
- 25. long int en PHP
- 26. Convertir meses mmm a numérico
- 27. ¿No se puede convertir implícitamente el tipo 'int?' a 'int'
- 28. Cómo convertir String a long en Java?
- 29. ¿Convertir int a cadena?
- 30. ¿GCC es compatible con long long int?
posible duplicado de (http://stackoverflow.com/questions [¿Cómo convertir una cadena C++ para un int?]/200090/how-do-you-convert-ac-string-to-an-int) –