8 Cadenas de caracteres
Antes de entrar en el tema de los arrays también conocidos como arreglos, tablas o matrices, veremos un caso especial de ellos. Se trata de las cadenas de caracteres, frecuentemente nombrados en inglés como strings.
Nota:
En informática es frecuente usar términos en inglés, sobre todo cuando la traducción puede inducir a errores, como en este caso, en que string se suele traducir como cuerda o cadena.
Aunque array también se puede traducir como ristra o sarta, que en este caso parece más apropiado, en ningún texto de programación verás que se hable jamás de ristras o sartas de caracteres o enteros.
Una cadena en C++ es un conjunto de caracteres, o valores de tipo char, terminados con el carácter nulo, es decir el valor numérico 0. Internamente, en el ordenador, se almacenan en posiciones consecutivas de memoria. Este tipo de estructuras recibe un tratamiento muy especial, ya que es de gran utilidad y su uso es continuo.
La manera de definir una cadena es la siguiente:
char <identificador> [<longitud máxima>];
Nota:
En este caso los corchetes no indican un valor opcional, sino que son literalmente corchetes, por eso están en negrita.
Cuando se declara una cadena hay que tener en cuenta que tendremos que reservar una posición para almacenar el carácter nulo terminador, de modo que si queremos almacenar la cadena "HOLA", tendremos que declarar la cadena como:
char Saludo[5];
Las cuatro primeras posiciones se usan para almacenar los caracteres "HOLA" y la posición extra, para el carácter nulo.
También nos será posible hacer referencia a cada uno de los caracteres individuales que componen la cadena, simplemente indicando la posición. Por ejemplo el tercer carácter de nuestra cadena de ejemplo será la 'L', podemos hacer referencia a él como Saludo[2].
Es muy importante tener presente que en C++, los índices tomarán valores empezando siempre en cero, así el primer carácter de nuestra cadena sería Saludo[0], que es la letra 'H'.
En un programa C++, una cadena puede almacenar informaciones en forma de texto, como nombres de personas, mensajes de error, números de teléfono, etc.
La asignación directa sólo está permitida cuando se hace junto con la declaración.
El siguiente ejemplo producirá un error en el compilador, ya que una cadena definida de este modo se considera una constante, como veremos en el capítulo de "arrays" o arreglos.
char Saludo[5]; Saludo = "HOLA"
La manera correcta de asignar una cadena es:
char Saludo[5]; Saludo[0] = 'H'; Saludo[1] = 'O'; Saludo[2] = 'L'; Saludo[3] = 'A'; Saludo[4] = 0;
O bien:
char Saludo[5] = "HOLA";
Si te parece un sistema engorroso, no te preocupes, existen funciones que facilitan la manipulación de cadenas.
De hecho, existen muchas de tales funciones, que permiten compararlas, copiarlas, calcular su longitud, imprimirlas, visualizarlas, guardarlas en disco, etc. Además, frecuentemente nos encontraremos a nosotros mismos creando nuevas funciones que básicamente hacen un tratamiento de cadenas.
En C existe una biblioteca estándar (disponible en todos los compiladores), llamada precisamente string. En C++ también existe una biblioteca para manipular cadenas, aunque en este caso se trata de una biblioteca de clases.