Aggiornamento per C ++ 11
A partire dallo C++11
standard, la conversione da stringa a numero e viceversa sono incorporate nella libreria standard. Tutte le seguenti funzioni sono presenti in<string>
(come da paragrafo 21.5) .
stringa in numerico
float stof(const string& str, size_t *idx = 0);
double stod(const string& str, size_t *idx = 0);
long double stold(const string& str, size_t *idx = 0);
int stoi(const string& str, size_t *idx = 0, int base = 10);
long stol(const string& str, size_t *idx = 0, int base = 10);
unsigned long stoul(const string& str, size_t *idx = 0, int base = 10);
long long stoll(const string& str, size_t *idx = 0, int base = 10);
unsigned long long stoull(const string& str, size_t *idx = 0, int base = 10);
Ognuno di questi prende una stringa come input e proverà a convertirla in un numero. Se non è stato possibile costruire un numero valido, ad esempio perché non ci sono dati numerici o il numero è fuori intervallo per il tipo, viene generata un'eccezione ( std::invalid_argument
ostd::out_of_range
).
Se la conversione è riuscita e idx
non lo è 0
,idx
conterrà l'indice del primo carattere che non è stato utilizzato per la decodifica. Questo potrebbe essere un indice dietro l'ultimo carattere.
Infine, i tipi integrali consentono di specificare una base, per cifre maggiori di 9 si assume l'alfabeto ( a=10
until z=35
). Puoi trovare ulteriori informazioni sulla formattazione esatta che può essere analizzata qui per numeri in virgola mobile , interi con segno e interi senza segno .
Infine, per ogni funzione è presente anche un overload che accetta un file std::wstring
come primo parametro un.
numerico in stringa
string to_string(int val);
string to_string(unsigned val);
string to_string(long val);
string to_string(unsigned long val);
string to_string(long long val);
string to_string(unsigned long long val);
string to_string(float val);
string to_string(double val);
string to_string(long double val);
Questi sono più semplici, si passa il tipo numerico appropriato e si ottiene una stringa. Per le opzioni di formattazione dovresti tornare all'opzione stringsream C ++ 03 e utilizzare i manipolatori di flusso, come spiegato in un'altra risposta qui.
Come notato nei commenti, queste funzioni ricadono su una precisione di mantissa predefinita che probabilmente non è la massima precisione. Se è necessaria una maggiore precisione per la tua applicazione, è anche meglio tornare ad altre procedure di formattazione delle stringhe.
Esistono anche funzioni simili definite che vengono nominate to_wstring
, queste restituiranno un file std::wstring
.