Sie sind auf Seite 1von 30

Sesin 6

Cadenas

Ms. Ing. CARLOS AURELIO ROMERO SHOLLANDE caromerosh@yahoo.es


UNIVERSIDAD NACIONAL DE TRUJILLO Trujillo - Per

Introduccin
El C++ carece de incorporador de cadenas (string), por lo que una cadena se define como un arreglo de caracteres. Sintaxis : char nombrecadena [tamao]; Propsito : Declarar un arreglo de caracteres que terminan con un nulo. Ejemplo : char m[12];

El ejemplo declara que m es una cadena de 12 caracteres. El nulo se especifica como \0 y en C++ es cero; por esta razn se debe declarar arreglos de caracteres con un carcter ms que la cadena ms larga que vaya a guardar. Por ejemplo, si se desea declarar un arreglo w que guarde una cadena de quince caracteres, se escribir: char w[16];

Introduccin
Esta declaracin hace un lugar para un nulo al final de la cadena. Una constante de caracteres debe encerrarse entre apstrofes. Ejemplo: t Una constante de cadena es una lista de caracteres que se encierra entre comillas. Ejemplo: TECLADO No se necesita aadir el nulo manualmente al final de la constante de cadena, el C++ lo hace automticamente, as la cadena anterior se ver en la memoria de la siguiente manera:
T E C L A D O \0

Lectura de un Carcter desde Teclado


Sintaxis Archivo Propsito Ejemplo : : : : variable = char getche (void); <conio.h> Leer un carcter nico desde el teclado. h = getche ();

Esta funcin espera hasta que se pulse una tecla y entonces devuelve el resultado.

Lectura de una Cadena desde Teclado


Sintaxis Archivo Propsito Ejemplo : : : : char *gets(char *s); <stdio.h> Introducir una cadena s desde teclado. gets(w);

Se puede llamar a gets() con el nombre de la cadena, sin ningn ndice como argumento y continuar leyendo caracteres hasta que se introduzca un retorno de carro.

Copia de Cadenas
Sintaxis : char *strcpy (char *s1, const char *s2); char *strncpy (char *s1,const char *s2,int n); Archivo : <string.h> Propsito : Copiar el contenido de la constante de cadena s2 a la cadena s1; se devuelve el valor de s1. En el caso de strncpy, se copia slo una porcin de n caracteres de la cadena s2 a s1. Ejemplo : strcpy (g, Feliz); La sentencia anterior copiar Feliz en g. El arreglo que forma g debe ser lo suficiente grande para guardar Feliz. Si g no es lo suficiente grande, el arreglo se desbordar y es probable que se dae el programa.

Concatenado de Cadenas
Sintaxis : char *strcat (char *s1, const char *s2); char *strncat (char *'s1, const char *s2, int n); Archivo : <string.h> Propsito : Aadir o concatenar una copia de la constante de cadena s2 al final de la cadena s1, el primer carcter de s2 sobreescribe el carcter nulo con que termina s1; se devuelve el valor de la cadena s1. La operacin no afecta a la cadena s2. En el caso de strncat, se aade solo una porcin de n caracteres de la cadena s2 a s1. Ejemplo : strcat(g, Navidad);

Comparacin de Cadenas
Sintaxis : int strcmp (const char *s1, const char *s2); int strncmp (const char *s1, const char *s2, int n); Archivo : <string.h> Propsito : Comparar la cadena s1 con la cadena s2, ambas terminadas en nulo y devuelve un entero basado en la salida, de acuerdo a la tabla adjunta. En el caso de strncmp, slo se compara una porcin de n caracteres de ambas cadenas. Ejemplo : strcmp (c, Grados);

Comparacin de Cadenas
El ejemplo compara la constante de cadena Grados con el contenido de la cadena c. Valores alternativos de strcmp.

Valor Significado Lexicogrfico <0 s1 es menor que s2 0 s1 es igual a s2 >0 s1 es mayor que s2

Longitud de Cadenas
Sintaxis : unsigned int strlen (const char *s); Archivo : <string.h> Propsito : Devolver la longitud de la cadena terminada en nulo que define s. La funcin no cuenta el nulo. Ejemplo : cout<<strlen ("Feliz Cumpleaos"); La sentencia anterior imprime el nmero 16 en la pantalla.

Conversin de Cadenas a Nmeros


Sintaxis : long int strtol (const char *s, char **endptr, int radix); double strtod (const char *s, char **endptr); Archivo : <:stdlib.h> Propsito : Convertir la cadena de caracteres s a entero largo (strtol) o a doble punto flotante (strtod). Ejemplo : y = strtol (x, &endptr, 10); z = strtod(x, &endptr);

Conversin de Cadenas a Nmeros


El argumento radix es utilizado por strtol para asignar la base del nmero al cual est siendo convertida la cadena s, esta base debe estar entre 2 y 36. Para detectar posibles errores se utiliza el argumento &endptr, el mismo que debe definirse previamente como: char *endptr;

Conversin de Nmeros a Cadenas


Sintaxis : char *itoa (int v, char *s, int. radix); char *ltoa (long int v, char *s, int radix); Archivo : <stdlib.h> Propsito : Convertir un entero (itoa) o entero largo (ltoa) v a cadena de caracteres s. Ejemplo : itoa(a, g, 10); El argumento radix es empleado para especificar la base del nmero v, a la cual est siendo convertida la cadena s, esta base debe estar entre 2 y 36.

Inversin de los Caracteres de una Cadena


Sintaxis : char *strrev (char *s); Archivo : <string.h> Propsito : Invertir todos los caracteres de una cadena en orden inverso, excepto el carcter de terminacin NULO. Ejemplo : strrev (k);

Insercin de un Carcter a una Cadena


Sintaxis : char *strset (char *s, int c); char *strnset (char *s, int c, int n); Archivo : <string,h> Propsito : Copiar el carcter c en toda la cadena s. En el caso de strnset copia el carcter c en los primeros n caracteres de s. Ejemplo : strnset (k, *, 4);

Cdigo ASCII de un Carcter


Sintaxis : int toascii (int c); Archivo : <ctype.h> Propsito : Obtener el cdigo ASCII que le corresponde al carcter c. Ejemplo : toascii (v); Para hacer esta operacin tambin se utiliza el formato: codigo = int(c) Para obtener el carcter c que corresponde a un cdigo ASCII se usa el formato: c = char(codigo);

Borrado de una Porcin de Lnea


Sintaxis : void clreol (void); Archivo : <conio.h> Propsito : Borrar una lnea, de izquierda a derecha, desde la posicin actual del cursor hasta el final de la lnea. Esta es una funcin de control de consola. Ejemplo : clreol();

Cambio de un Carcter a Minscula


Sintaxis : int tolower (int c); Archivo : <ctype,h> Propsito : Devolver el equivalente de c en minsculas, si c es una letra. En caso de que c no sea una letra, no se realizarn cambios. Ejemplo : cout<<tolower (W); El ejemplo anterior imprime en pantalla el carcter w.

Cambio de un Carcter a Maysculas


Sintaxis : int toupper (int c); Archivo : <ctype.h> Propsito : Devolver el equivalente de c en maysculas, si c es una letra. En caso de que c no sea letra, no se realizarn cambios. Ejemplo : cout<<toupper (t); Este ejemplo imprime en pantalla el carcter T.

Cambio de una Cadena a Minsculas


Sintaxis : int *strlwr (char *s); Archivo : <string.h> Propsito : Devolver el equivalente de todos los caracteres de s en minsculas. En caso de que algn carcter no sea letra, no se realizan cambios. Ejemplo : cout<<strlwr (PERSONAL 2002); El ejemplo anterior imprime en pantalla la cadena: personal 2002.

Cambio de una Cadena a Maysculas


Sintaxis : int *strupr (char *s); Archivo : <string.h> Propsito : Devolver el equivalente de todos los caracteres de s en maysculas. En caso de que alguno de los caracteres no sea una letra, no se realizarn cambios. Ejemplo : cout<<strupr (Programa 53);

El ejemplo anterior imprime en pantalla la cadena: PROGRAMA 53.

Ejemplo
Ingresar un carcter, obtener su cdigo ASCII, multiplicarlo por un nmero aleatorio de tres cifras. Luego, el resultado transformarlo a cadena, invertir el orden de sus caracteres e insertar el signo de dlar como primer carcter de la cadena generada.

Reportar todos los resultados obtenidos.

Ejemplo
#include <iostream.h> // CODIGO ASCII * # ALEATORIO #include <conio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> main() { char h; // Carcter ingresado inicialmente char j[10]; // Cadena resultante del proceso int g; // Cdigo ASCII del carcter int r; // Nmero aleatorio long int p; // Producto de nmero aleatorio por cdigo ASCII clrscr(); cout<<Ingresar un carcter: ; h = getche(); g = toascii(h); cout<<Cdigo ASCII : <<g;

Ejemplo
randomize(); r = rand() % 900 + 100; cout<<Nmero aleatorio: <<r; p=(long int) g * r; cout<<Producto : <<p; ltoa(p, j, 10); cout<<Cadena normal : <<j; strrev(j); cout<<Cadena en reversa : <<j; strnset (j, $, l); cout<<Cadena en dlares : <<j; getch(); }

Arreglos de Cadenas
Sintaxis : char nombre_arreglo [tam_arr] [lon_cad]; Propsito : Declarar un arreglo de cadenas, que es un arreglo de caracteres de dos dimensiones, en la que el ndice izquierdo indica el nmero de cadenas y el ndice de la derecha especifica la longitud mxima de cada cadena. Ejemplo : char y[20][50];
El ejemplo indica que y cuenta con un mximo de 20 cadenas y cada cadena tiene un mximo de 50 caracteres. El acceso a una cadena individual se especifica solamente con el ndice izquierdo. Ejemplo: gets (Y[i]);

Inicializacin de Cadenas
Sintaxis : char nomb_cadena [tam] = {lista_caract}; Propsito : Inicializar cadenas en forma global. Ejemplo : char w[5] ={l, u, n, a, \0);
Los arreglos de caracteres que guardan cadenas permiten una inicializacin abreviada que tiene la forma: char nombre_cadena [tamao] = cadena; Ejemplo: char w[5] = luna; Este fragmento de cdigo inicializa w a luna: El C++ tambin puede dimensionar automticamente las cadenas, usando arreglos sin tamao. Ejemplo: char g[ ] = Autorizacin denegada;

Ejemplo
Elaborar un programa para ejecutar el Juego del Felino. La computadora generar una palabra que indica el nombre de una especie de felino en forma aleatoria desde un banco de 10 palabras (todas maysculas).

E1 jugador tendr que adivinar la palabra seleccionada. si falta estar en camino hacia la jaula de los leones. Al tercer intento fallido estar condenado a la jaula de los leones.

Ejemplo
#include <iostream.h> // JUEGO DEL FELINO #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> main() { char felinos[11][I0] = { GATO, GUEPARDO, JAGUAR, LEON, LEOPARDO, LINCE, PANTERA, PUMA, SERVAL, TIGRE, }; char f[10]; // Especie de felino ingresado por usuario int j; // Nmero aleatorio para elegir un felino del grupo int i; // Contador oportunidades para no ser condenado jaula randomize(); j = rand()%10; i = 0;

Ejemplo
clrscr(); do { i = +1; gotoxy(5,2); cout<<Nombre de la especie de un felino: ; gotoxy(45,2); clreol(); gotoxy(45,2); gets(f); strupr(f); if (strcmp (felinos[j], f)==0) { gotoxy(5,6); clreol(); gotoxy(5,6); cout<<Estas perdonado ; goto final; } else { gotoxy(5,6); clreol(); cout<<Lo lamento, vas camino a la jaula de los leones; } } while(i<3);

Ejemplo
clrscr(); cout<<Fallaste, la especie es : <<felinos[j]; cout<<Estas condenado a la .JAULA DE LOS LEONES; final: cout<<Fin; getch(); }