Práctica Nº 11: Cadenas de caracteres: strings

Anuncio
[
]
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
Descargar