You are on page 1of 2

Laboratorio de Programacin E.T.S.I.

Informtica 1 A Gestin

Prctica 7: Cadenas de caracteres en C++


Una cadena de caracteres en C++ no es ms que un array de caracteres. EN C++ TODAS LAS CADENAS DE CARACTERES DEBEN LLEVAR EL CARCTER 0 COMO TERMINADOR. Veamos a continuacin una posible definicin de cadenas de caracteres. Si queremos ser capaces de almacenar MAXCAD C++ SIEMPRE PASA LOS PARMETROS DE TIPO ARRAY POR REFERENCIA, AUNQUE POR LEGIBILIDAD COLOCAREMOS EL SIMBOLO & CUANDO QUERAMOS EXPRESAR QUE EL PARMETRO SE VA A MODIFICAR. C++ NO PERMITE IMPLEMENTAR FUNCIONES QUE DEVUELVAN ARRAYS

caracteres, debemos definir el array de tamao MAXCAD+1 para que pueda almacenar el mximo nmero de caracteres y aadirles es finalizador de cadena. // Zona de Declaracin de Constantes const char FINCAD = char(0)1; const char ENTER = '\n'; const int MAXCAD = 20; // Zona de Declaracin de Tipos typedef char TCadena[MAXCAD+1]; // MAXCAD caracteres + FINCAD

Entrada/Salida de Cadenas de Caracteres.


Uso de cin El uso de cin de manera estndar tiene 2 problemas: La cadena es leda hasta que se encuentre ENTER, espacio o tabulador. Esto hace que se puedan perder datos, por ejemplo, si una persona tiene dos nombres, al usar cin >> nombre, se estara perdiendo el segundo de ellos. Lo que no se ha ledo, se queda almacenado en el buffer de teclado, por lo que si no queremos que se mezcle con otras lecturas debemos ignorarlo. Ese es el motivo de la sentencia cin.ignore(MAXCAD,ENTER), que lo que hace es ignorar lo que haya en el buffer de teclado hasta un mximo de caracteres o un separador (ENTER en nuestro caso).

Uso de cin.getline(TCadena &cadena, int tam_array, char separador) cin.getline lee caracteres desde teclado hasta que se encuentre el carcter que se indique como separador de datos o se hayan ledo el nmero de caracteres que se indica como tamao del array menos 1 (para que quepa el finalizador), almacenndolos en el array de caracteres que se le pasa como parmetro y colocndole el carcter terminador. Esta funcin ser la que utilicemos normalmente (salvo que se diga explcitamente que no se puede usar) para leer cadenas de caracteres, ya que, aunque debemos pasarle como parmetros tanto el nmero mximo de caracteres como el separador de cadenas, la llamada cin.getline(s, MAXCAD+1, ENTER) tiene exactamente el mismo

funcionamiento que la funcin LEER definida para el pseudolenguaje.

Tambin es vlido el uso de '\0' para indicar el carcter constante 0

Depto. de Lenguajes y Ciencias de la Computacin de la Universidad de Mlaga @ 2006 1

Laboratorio de Programacin E.T.S.I. Informtica 1 A Gestin

PRACTICA
Escribir un programa defina un tipo TCadena como una array de un mximo de 80 caracteres y que presente un men con las opciones que se muestran a continuacin (todas ellas ejercicios de cadenas):

Elaborado por: <Nombre> <Apellidos> Fecha: <Fecha> MENU PRACTICA 7 ================ Palndromos. Busca Patrn. Cadena a Real. Concatena Cadenas. Salir del Programa. Introduzca Opcin:

Curso 1A Gestin Ordenador : <Ordenador>

A. B. C. D. X.

Descripcin de las Opciones: A.- Palndromos. Se dice que una palabra o frase es palndromo si al leerla de izquierda a derecha, obviando los signos de puntuacin y la diferencia entre minsculas y maysculas, obtenemos la palabra o frase original. Por ejemplo: "Dabale arroz a la zorra el abad". En este apartado se debe leer una frase y decir si es o no palndromo. B.- Busca Patrn. Leer 2 cadenas desde teclado y decir si la segunda cadena est contenida en la primera y en dicho caso, indicar a partir de qu posicin. C.- Cadena a Real. Leer desde teclado una cadena de caracteres y decir si es un nmero real vlido y en dicho caso, el nmero que representa. D.- Concatena Cadenas. Leer 2 cadenas desde teclado, concatenarlas y mostrar la concatenacin por pantalla. Por ejemplo, el resultado de concatenar las cadenas "hola" y ", y adis" sera: "hola, y adis". X. Salir del Programa. Se solicita confirmacin y slo en caso de sea afirmativa se sale del programa.

Depto. de Lenguajes y Ciencias de la Computacin de la Universidad de Mlaga @ 2006 2

You might also like