Qual è il modo migliore per convertire std: wstring in tipo numerico, ad esempio int, long, float o double?Come convertire std: wstring in tipo numerico (int, long, float)?
risposta
usare sia 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);
Questi lancerà un'eccezione boost::bad_lexical_cast
se la stringa non può essere convertito.
L'altra opzione è quella di utilizzare Boost Qi (un sublibrary di 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
Utilizzando Qi è molto più veloce di lexical_cast ma aumenterà i tempi di compilazione.
E la gente sostiene che il C++ sia inutilmente complesso! –
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;
}
Il migliore?
Se non si desidera utilizzare qualcosa di più che la libreria CRT, e sono felice con ottenere 0 se la stringa non può essere convertito, quindi è possibile salvare sulla gestione degli errori, sintassi complessa, tra cui intestazioni da
std::wstring s(L"123.5");
float value = (float) _wtof(s.c_str());
Tutto dipende da quello che stai facendo. Questo è il modo KISS!
Da dove proviene '_wtof'? –
@david Libreria c run time (CRT) – ravenspoint
Non vedo alcun riferimento ad esso nello standard C99 o Harbison & Steele. Forse wcstod/wcstol/wcstoul sarebbe meglio. –
C++ 0x introduce il followingfunctions in <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
è un puntatore nullo opzionalmente alla fine della conversione entro str
(impostata dalla funzione di conversione).
Così stavo usando Embarcadero e quel pezzo di ..... non mi ha permesso di usare stoi, quindi devo creare la mia funzione.
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;
}
basta usare lo stringstream: non dimenticate di #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. Come convertire Long in Int in Kotlin?
- 2. Trasmissione di tipo Java - float (e long) a int
- 3. std :: streampos, std :: streamoff e std :: streamsize to long long int?
- 4. C++: long long int vs long int vs int64_t
- 5. Il modo migliore per convertire std :: wstring in QString
- 6. Converti std :: wstring a WCHAR *
- 7. Come convertire float a int con Java
- 8. Come convertire un long in int in Java vs. swift?
- 9. Come posso convertire da int a Long in Java?
- 10. convertire int a std :: string
- 11. unsigned long long int pow
- 12. Come inizializzare e stampare un std: wstring?
- 13. Java Float to Long Typecast
- 14. Impossibile passare std :: wstring su DLL
- 15. Come convertire int * in int
- 16. Come convertire la stringa in long
- 17. Come convertire 'long long' (o __int64) in __m64
- 18. Il GCC supporta long long int?
- 19. Discussione sul tipo numerico generico in C#
- 20. int to long assignment
- 21. Converti float in std :: string in C++
- 22. aritmetica Java int vs. long
- 23. come interrompere la conversione automatica da int a float e viceversa in std :: map
- 24. Come convertire unsigned long in stringa
- 25. Converti long a due int e viceversa
- 26. Come convertire l'array int in int?
- 27. C++ Come faccio a convertire un std :: chrono :: time_point a long e back
- 28. C++ - std :: wstring a std :: string - conversione rapida e sporca da utilizzare come chiave in std :: map
- 29. Python: errore di overflow lungo int troppo grande per convertire in float
- 30. Impossibile convertire il tipo 'System.Enum' a int
possibile duplicato (http://stackoverflow.com/questions [Come si fa a convertire una stringa C++ per un int?]/200090/how-do-you-convert-ac-string-to-an-int) –