Texto / C++17

Caracteres y conversiones

Llevar al apunte ↗

Descripción

Un carácter como '7' y el entero 7 representan cosas diferentes. Las conversiones permiten pasar del texto a un valor con el que calcular, o construir el texto que después vas a imprimir.

Usá restas de caracteres para un dígito decimal garantizado o para índices de alfabetos consecutivos como las letras inglesas de estos ejemplos. stoi y stoll convierten un texto con un entero. to_string produce un string a partir de un valor numérico.

Las funciones de <cctype> permiten consultar si un carácter es dígito o convertir mayúsculas y minúsculas. Reciben un valor representable como unsigned char o el fin de archivo. Para un char leído de texto, convertirlo a unsigned char antes de llamar evita valores negativos fuera de su contrato.

Funciones y operaciones

Uso Parámetros o condición Resultado
c - '0' Dígito de '0' a '9' Entero de 0 a 9
static_cast<char>('0' + d) Entero de 0 a 9 Su carácter decimal
c - 'a' Letra inglesa minúscula Índice de 0 a 25 en los entornos habituales del juez
stoi(s) Prefijo entero representable Valor como int
stoll(s) Prefijo entero representable Valor como long long
to_string(x) Entero String con sus dígitos
isdigit(c) Carácter válido para <cctype> Valor distinto de cero si es un dígito
tolower(c) / toupper(c) Carácter válido para <cctype> Código convertido como int, según la configuración de caracteres

Ejemplos

Dígitos y posiciones de letras

char digito = '7';
int valor = digito - '0'; // 7
char nuevo = static_cast<char>('0' + 3); // '3'
int indice = 'c' - 'a'; // 2

Convertir enteros

int cantidad = stoi("125");
long long costo = stoll("123456789012");
string texto = to_string(costo); // "123456789012"

Si la entrada garantiza un entero válido, elegí el tipo por su rango. Una conversión con texto inválido o un valor demasiado grande da error. Un prefijo numérico válido puede bastar, como 125 en "125abc".

Saber cuánto texto se consumió

string texto = "125abc";
size_t leidos = 0;
int valor = stoi(texto, &leidos);
bool completo = (leidos == texto.size()); // false
// valor vale 125 y leidos vale 3

&leidos pasa la dirección de la variable donde la función guarda el final de la conversión.

Consultar y cambiar un carácter

char letra = 'A';
unsigned char segura = static_cast<unsigned char>(letra);
char minuscula = static_cast<char>(tolower(segura)); // 'a'
bool esDigito = (isdigit(segura) != 0); // false

Estas operaciones trabajan sobre caracteres individuales. Para transformar un string, recorré sus caracteres y aplicá la operación a cada uno.