Actualización para C ++ 11
Como C++11
estándar, la conversión de cadena a número y viceversa están incorporadas en la biblioteca estándar. Todas las funciones siguientes están presentes en <string>
(según el párrafo 21.5).
cadena a numérico
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);
Cada uno de estos toma una cadena como entrada e intentará convertirla en un número. Si no se pudo construir un número válido, por ejemplo porque no hay datos numéricos o el número está fuera del rango para el tipo, se lanza una excepción ( std::invalid_argument
o std::out_of_range
).
Si la conversión tuvo éxito y idx
no lo es 0
, idx
contendrá el índice del primer carácter que no se usó para decodificar. Este podría ser un índice detrás del último carácter.
Finalmente, los tipos integrales permiten especificar una base, para dígitos mayores a 9, se asume el alfabeto ( a=10
hasta z=35
). Puede encontrar más información sobre el formato exacto que se puede analizar aquí para números de punto flotante , enteros con signo y enteros sin signo .
Finalmente, para cada función también hay una sobrecarga que acepta a std::wstring
como primer parámetro.
numérico a cadena
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);
Estos son más sencillos, pasa el tipo numérico apropiado y obtiene una cadena de regreso. Para las opciones de formato, debe volver a la opción de secuencia de cadenas de C ++ 03 y usar manipuladores de secuencia, como se explica en otra respuesta aquí.
Como se señaló en los comentarios, estas funciones recurren a una precisión de mantisa predeterminada que probablemente no sea la precisión máxima. Si se requiere más precisión para su aplicación, también es mejor volver a otros procedimientos de formateo de cadenas.
También hay funciones similares definidas que se nombran to_wstring
, estas devolverán un std::wstring
.