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 );