Cadenas de Caracter e Sen CPP
Cadenas de Caracter e Sen CPP
Cadenas de Caracter e Sen CPP
Curso 2008-2009
Lectura de cadenas. Funciones de C para el manejo de cadenas. El operador cin, presenta un problema a la hora de introducir una cadena de caracteres por teclado y es que no admite espacios en blanco ( recordar que cin utiliza los espacios en blanco como separadores, los lee pero no los almacena). Observa el siguiente ejemplo: char cadena1[15], cadena2[15]; cin>>cadena1; cin>>cadena2; Si introducimos por teclado la cadena HOLA A TODOS, tras la primera lectura el valor de cadena ser HOLA, es decir, que se omite todo lo que va detrs del primer espacio en blanco. Esto es debido a que los espacios en blanco actan como marca de fin de cadena. En la segunda lectura, el valor que se lee para la cadena sera A. Para evitar este problema, utilizaremos la funcin gets(<cadena>) para lectura. Por ejemplo, char cadena[20]; gets(cadena); Notas: - Como era de esperar, tanto cin como gets aaden el carcter de fin de cadena \0. - Si necesitamos leer varias cadenas seguidas (por ejemplo tenemos un while en el que se guarda cadenas), debemos utilizar la instruccin fflush(stdin), para borrar o liberar lo que haya en el buffer del teclado antes de leer cada cadena. Por ejemplo:
char nombre[20]; while(a<=10) { cout<<Introduce el nombre<<endl; fflush(stdin); gets(nombre); }
Devuelve el nmero de caracteres de la cadena que se le pasa como parmetro sin contar el carcter \0. Por ejemplo, strlen(Hola) devuelve 4. Funcin strcpy (string copy, copia de cadena)
Excepto en el momento de la inicializacin, en C no es posible dar valor a una variable cadena en una sentencia de asignacin. As, char cadena[10]; cadena=Hola;
/*ERROR!!!*/
es incorrecto. La nica forma de hacer esto es a travs de la funcin strcpy, que copia en la variable cadena que se le pasa como primer parmetro el valor de la cadena que se le pasa como segundo parmetro. La forma correcta de hacer la asignacin anterior es pues: char cadena[10]; strcpy(cadena,Hola); /*CORRECTO!!!*/ Funcin strcmp (string compare, comparacin de cadenas)
Sirve para comparar dos cadenas lexicogrficamente (es decir, por orden alfabtico). No compara cadenas por tamao. Devuelve un entero negativo si la primera es menor que la segunda, un entero positivo si la primera es mayor que la segunda y cero si las dos cadenas son la misma. strcmp(Ala,Hola); /*Devuelve un valor <0*/ strcmp(Hola,Ala); /*Devuelve un valor >0*/ strcmp(Hola,Hola); /*Devuelve 0*/ Todas ellas tienen su prototipo en el fichero de cabecera <cstring>. EJERCICIOS: A) Ejercicios sobre manipulacin de cadenas de caracteres 1) Traduce el siguiente algoritmo a C++ (dado un dni, calcula la letra del NIF correspondiente):
algoritmo calculoNIF variables dni : entero letranif :carcter principio leer(dni) letranifcalculoletranif(dni) escribir(letranif) fin funcin calculoletranif (dni :entero) devuelve carcter variables tabla : vector[1..23] de carcter resto : entero principio {inicializar tabla a TRWAGMYFPDXBNJZSQVHLCKE} restodni MOD 23 devuelve(tabla[resto+1]) fin
2) Disear un programa que lea una cadena de caracteres y la invierta. 3) Crear un programa que compruebe si un texto introducido por teclado es o no un palndromo.
B) Ejercicios sobre cadenas de caracteres, vectores y registros Dada la siguiente estructura de datos :
tipos
tEmpleado=registro nombre:cadena dni:cadena horasTrabajadas:entero precioHora:real freg
3) Escribir un subprograma que compruebe si los datos de los empleados de la empresa estn almacenados o no alfabticamente.