[ ] Departament d’Informàtica Departamento de Informática Informática PRÀCTICA 11 Curs 2002-2003 FACULTAT DE MATEMATIQUES UNIVERSITAT DE VALENCIA Práctica Nº 11: Cadenas de caracteres: strings Objetivos de la práctica: - Utilización de cadenas de caracteres (clase string de C++). - Uso de funciones que operan con cadenas: funciones de la biblioteca string y de la ctype - Uso de funciones de entrada y salida para trabajar con caracteres. Cadenas de caracteres Una cadena de caracteres (strings) no es más que un array de caracteres. Por esta razón, se suele relacionar el concepto de string con el de array. Las cadenas nos permiten la manipulación de textos. En C++, existe el tipo (clase, en la nomenclatura de los lenguajes orientados a objetos) string. Para su uso es preciso utilizar #include <string> (no usar <string.h> que es la cabecera correspondiente a la biblioteca de cadenas en C). Definición de variables: string palabra, frase; string cadena(“Hola”); Asignación de variables: frase = “hola”; palabra = frase; Acceso a los caracteres: Accederemos a cada uno de los caracteres integrantes de la cadena como si accediéramos a los elementos de un array (una cadena es un array de caracteres). char caracter palabra=”hola”; caracter= palabra[0] // Variable carácter tenemos el carácter “h” que es el primer elemento // de la variable palabra lectura/escritura: Leer una palabra sola cin >> palabra; Leer toda una frase hasta encontrar el final de línea. getline (cin, frase); // lee la frase del teclado hasta encontrar el final de línea cout << frase; //Muestra por pantalla una frase Práctica Nº 11: Cadenas de caracteres: strings 1/4 [ ] Departament d’Informàtica Departamento de Informática Informática PRÀCTICA 11 Curs 2002-2003 FACULTAT DE MATEMATIQUES UNIVERSITAT DE VALENCIA Paso de cadenas a las funciones Al igual que los arrays, cuando se pasa una cadena a una función, sólo se le pasa la dirección de comienzo de la cadena y no una copia de la cadena entera, es decir, el paso de cadenas como parámetro de una función es también un paso por referencia, por tanto será parámetro de entrada pero al mismo tiempo será parámetro de salida. Funciones de entrada y salida de caracteres en C++ C++ ofrece algunos recursos para la entrada y salida de datos de caracteres. Función cin.get(car); Descripción Ejemplos Lee un carácter de entrada y lo guarda en una char c1; variable de tipo char. cin.get(c1); cout.put(car); Escribe un carácter de tipo char por la salida char c1; estándar. cout.put(c1); cin.ignore( ); Este método permite descartar caracteres cin.get(ch1); existentes en el buffer de entrada. cin.ignore( ); // Ignora ‘\n’ Operaciones que podemos realizar sobre las cadenas: Operación Descripción Concatena (une) dos cadenas cad1 + cad2 cad1 += cad2 cad1.insert(pos,cad2) len= cad1.length( ); cad1.erase(pos,long) Ejemplos cad1=”Buenos”; cad2=”dias”; concat1=cad1+cad2; La variable frase contiene la cadena “buenosdias” concat2= cad1+” “+cad2; La variable concat2 contiene la cadena “Buenos dias”. El contenido de cad2 se cad1+=cad2; concatena (añade) al final) de cad2; el tamaño se ajusta de En cad1 tenemos la cadena “Buenosdias” manera acorde. cad2+=cad1; En cad2 tenemos la cadena “diasBuenos” Inserta la cadena cad2 en la cad1.insert(3,cad2); cadena cad1 a partir de la En cad1 tenemos “Buediasnos” posición pos. Devuelve el número de i= cad1.length( ); caracteres de la cadena cad1. i vale 6 (6 caracteres de “Buenos”). Borra long caracteres de la cad1.erase(1,3); cadena cad1 desde la posición Borra los caracteres “uen”, en pos. Práctica Nº 11: Cadenas de caracteres: strings 2/4 [ ] Informática PRÀCTICA 11 Curs 2002-2003 Departament d’Informàtica Departamento de Informática FACULTAT DE MATEMATIQUES UNIVERSITAT DE VALENCIA cad1 tendremos la cadena “Bos”. cad1.replace(pos,long, cad2) Sustituye (reemplaza) long caracteres de la cadena cad1 Empezando en la posición pos, por la cadena cad2. cad1.replace(0,3,cad2); pos= cad1.find (cad2) Busca la cadena cad2 dentro de la cadena cad1, nos devuelve la posición donde se encuentra la primera ocurrencia de cad2. i=cad1.find(“ue”); cad1.substr(pos,long) Sustituye los caracteres “Bue” de cad1 por los caracteres “dia” de cad2. En cad1 tendremos “diasnos”. Devuelve 1 i=cad2.find(“ue”); Devuelve -1, porque no se encuentra la cadena “ue” en cad2. Devuelve una subcadena cad= cad1.substr(1,3); formada por long caracteres de la cadena cad1 desde la La cadena cad es “uen”. posición pos. Comparaciones: cad1==cad2 cad1 != cad2 Determina igualdad o desigualdad; devuelve un valor booleano. cad1<cad2 cad1 > cad2 cad1<=cad2 cad2 >=cad2 Todas las comparaciones son lexicográficas, de manera que corresponden a nuestra idea intuitiva de cómo se comparan las cadenas. Funciones de carácter predefinidas Algunas funciones que trabajan sobre caracteres y que nos pueden ser útiles en el procesamiento de cadenas y por tanto de textos. Estas funciones se encuentran definidas en la biblioteca “ctype”, necesitamos incluir la cabecera “include <ctype.h” para utilizarlas. Función Descripción toupper(car) Devuelve la versión mayúscula de car Ejemplo char c= toupper(‘a’); En la variable c tenemos ‘A’; tolower(car) Devuelve la versión minúscula de car char c= tolower(‘A’); En la variable c tenemos ‘a’; isupper(car) Devuelve true si car es una letra mayúscula; if (isupper(c)) de lo contrario devuelve false. cout<<c<<”es mayúscula”; islower(car) Devuelve true si car es una letra minúscula; de if (islower(c)) lo contrario devuelve false. cout<<c<< “es minúscula”; isalpha(car) Devuelve true si car es una letra del alfabeto; char c=”$”; de lo contrario devuelve false. if (isalpha(c)) Práctica Nº 11: Cadenas de caracteres: strings 3/4 [ ] Departament d’Informàtica Departamento de Informática Informática PRÀCTICA 11 Curs 2002-2003 FACULTAT DE MATEMATIQUES UNIVERSITAT DE VALENCIA cout<<c<< “es una letra”; else cout<<c<<“no es una letra”; isdigit(car) Devuelve true si car es uno de los dígitos de if (isdigit(‘3’)) ‘0’ a ‘9’; de lo contrario devuelve false. Cout << “Es un digito”; isspase(car) Devuelve true si car es un carácter de espacio do en blanco, como el símbolo de nueva línea; de { lo contrario devuelve false. cin.get(c); } while (! isspase(c)); Práctica Nº 11: Cadenas de caracteres: strings 4/4