Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CADENAS DE CARACTERES
Hasta ahora se han manejado variables de tipo caracter cuyo valor es un slo caracter. En algunos casos, sin embargo, es necesario usar variables cuyos valores sean un conjunto (cadena) de caracteres, como en bases de datos con nombres de personas, instituciones, etc. Una cadena de caracteres podra verse como un conjunto de caracteres (numero, letras, smbolos de cdigo ascii) ordenados. Aunque no se haba visto de esa manera, todos los mensajes que enviamos a pantalla entre comillas usando la instruccin cout son en realidad cadenas de caracteres. Por ejemplo, la sentencia: cout<<Hola a todos ; permite que se muestra en pantalla el conjunto de caracteres H, o, l, a, espacio, a, espacio, t, o, d, o, s, espacio. Obviamente, el procesador de la computadora no sabe nada acerca del idioma espaol, por lo que el procesador simplemente muestra los caracteres anteriores en el orden que se le indica. En C++, como en casi cualquier otro lenguaje de programacin, es posible utilizar variables para almacenar y manipular cadenas de caracteres. La forma de hacer esto es a travs de arreglos. Por ejemplo, la siguiente es la declaracin de una variable (llamada nombre) que permite guardar una cadena de 19 caracteres: char nombre[20]; Observe que se dijo que dicho arreglo, aunque tiene 20 elementos, puede contener una cadena de slo 19 caracteres. Esto es debido a que las cadenas de caracteres se manejan muy parecido, pero no exactamente igual a un arreglo simple de caracteres. La diferencia es que, en una cadena de caracteres, al final de la cadena, el procesador automticamente coloca un caracter especial conocido como el caracter nulo y representado por el smbolo \0. De esta
Ingeniera Qumica
Programacin
forma, el procesador puede usar slo 19 elementos del arreglo para los caracteres y usar el ltimo elemento para el caracter nulo. Algo que no se ha mencionado, todos los elementos de cualquier arreglo de un programa se almacenan en memoria en forma contigua. Por ejemplo, el arreglo nombre[20] que se declar arriba se almacenara en la memoria de la computadora de la siguiente forma:
nombre[0]
nombre[19]
Esta caracterstica de los arreglos es muy importante cuando se manejan cadenas de caracteres. As, cuando se usa un arreglo para almacenar una cadena de caracteres, dichos caracteres se almacenan en orden en cada uno de los elementos del arreglos. Por ejemplo, si la cadena es Hola, esta cadena se almacenara en un arreglo de 10 elementos de la siguiente forma:
\0
Observe que, luego de los elementos del arreglo que guardan los caracteres de la cadena que se tiene, viene un elemento que almacena al caracter nulo y el resto de los elementos (5) no son utilizados y no almacenan ningn valor. Para que se observe la diferencia, un arreglo simple de caracteres (no una cadena), sera almacenada como:
Ingeniera Qumica
Programacin
char nombre_del_arreglo[numero_mximo_de_caracteres+1]={cadena};
Por ejemplo: char nombre[10]={Juan}; char nombre[10]=Pedro; Nota importante: Si uno usa la siguiente inicializacin (como se hizo anteriormente para arreglos simples): char nombre[10]={J, u, a, n};
Ingeniera Qumica
Programacin
El resultado no es una cadena de caracteres, pues este tipo de inicializacin no aade el caracter nulo al final, por lo que el resultado de dicha inicializacin es una arreglo simple de caracteres.
Este y el siguiente son temas que debieran de verse como una excepcin a los que se ha discutido anteriormente durante el curso. Para asignar un valor a una cadena de caracteres luego de declararlo, no se utiliza el smbolo de igual. Es decir, la asignacin: char nombre[20]; nombre = Juan; es incorrecta. Para hacer una asignacin es necesario utilizar una funcin predefinida en el lenguaje. En el caso de C++, esta funcin es strcpy. La funcin strcpy es una funcin sin valor de regreso que recibe dos argumentos. Un argumento es la variable cuyo valor se desea asignar y la otra es la cadena de caracteres que se desea asignar. Por ejemplo. Las siguientes dos asignaciones son correctas y equivalentes: char nombre[20]; strcpy(nombre, Juan); /* Llamado a la funcin strcpy */ o bien char nombre1[20], nombre2[20]=Juan; strcpy(nombre1, nombre2); /* Llamado a la funcin strcpy */ Nota importante: Para manipular cadenas de caracteres se requiere de funciones como la funcin strcpy. Las funciones para manipular cadenas de
Ingeniera Qumica
Programacin
caracteres se encuentran definidas en la librera string.h. Por lo tanto, va a ser necesario que incluyamos una nueva librera en nuestros programas con cadenas de caracteres:
#include <string.h>
Ingeniera Qumica
Programacin
La funcin strlen recibe como argumento una cadena y da como valor de regreso un entero que corresponde al nmero de caracteres de la cadena (sin contar al caracter nulo). Por ejemplo, en el caso siguiente: char nombre[10]=Juan; int x; x = strlen(nombre); La variable x tendra un valor de 4 luego que se ejecutan las sentencias. La funcin strcat recibe como argumentos dos cadenas y da como resultado la unin de ambas cadenas en el orden indicado. La segunda cadena se anexa a la primera cadena. Por ejemplo, las siguientes sentencias: char nombre[20]=Juan , apellido[10]=Razo; strcat(nombre,apellido); cambia el valor de la cadena nombre de Juan a Juan Razo. Para usar strlen y srtcat tambin se necesita string.h.
Ingeniera Qumica
Programacin
multidimensionales. As, por ejemplo, si char nombre[20]; se us para un solo nombre de 19 caracteres (mximo), la siguiente sentencia se puede usar para definir una variable que pueda contener 10 nombres de 19 caracteres: char nombre[10][20]; As, cada uno de nombre[0], nombre[1], ..., nombre[9] podra almacenar una cadena de 19 caracteres. Si se usan este tipo de arreglos multidimensionales, tanto las funciones de manipulacin de cadenas como cin y cout, se debera usar con el nombre del arreglo seguido de la primera de las dimensiones del arreglo mltiple. Por ejemplo: cin>>nombre[0]; cout<<nombre[3]; strcmp(nombre[4], nombre[5]); strcat(nombre[2], nombre[1]);
Ingeniera Qumica