Cadenas de C

Las cadenas de C no son más que vectores de caracteres, es decir:

char cadena[40] = "Hola"; // o tb. char cadena[40]= { 'H', 'o', 'l', 'a' };


Con este código se crea un vector de caracteres o cadena, capaz de albergar 39 caracteres. ¿Por qué uno menos del límite que se ha indicado? .... Porque las cadenas señalan su final con un carácter extra que es el cero, y debemos contar con él para albergarlo.

Tb. se pueden crear cadenas constantes:

const char NombreAlgoritmo[] = "QuickSort";

Como sabemos que el nombre de un vector es un puntero al primer elemento (carácter de la cadena), es posible hacer:

const char * NombreAlgoritmo = "QuickSort";

Como una cadena es un vector de caracteres, podemos hacer:

cadena[ 0 ] = 'L'; // Ahora cadena es "Lola"
cadena[ 255 ] = 'Q'; // Error. Cuidado, no hay comprobación de límites.

... y podemos recorrerla con un sencillo bucle:

for(int i = 0; i < strlen( cadena ); ++i) {
    cout << cadena[ i ] << endl;
}

Ésto nos permite introducir las funciones de manejo de caracteres, que están en la cabecera "cstring", y por tanto deben incluirse como:


#include <cstring>


El anterior bucle, sin embargo, es un desastre en términos de eficiencia. strlen() recorre la cadena hasta encontrar el cero, y después devuelve el número de caracteres que ha encontrado. Sin quererlo, hemos creado un algoritmo cuadrático. Podemos aprovecharnos, en cambio, de que el 0 final nos sirve como centinela:


for(char *p = cadena; *p != '\0'; ++p) {
    cout << *p << endl;
}


Aunque, por supuesto, si lo que deseamos es mostrar una cadena, con:


cout << cadena << endl;


Es suficiente.
Si lo que queremos es pedir una cadena por teclado, nos servirá con:


cin.getline( cadena, 40 );