Вы находитесь на странице: 1из 24

Cadenas de Caracteres

Ctedra de Programacin Departamento de Computacin Escuela de Ingeniera de Sistemas Facultad de Ingeniera Original Prof. Flor Narciso

Mayo 2004

Ctedra de Programacin. Programacin 1.

Cadena de Caracteres
z Secuencia de caracteres definida en un alfabeto
z hola, casa, perro, y67Frabe \#

z Estructura de almacenamiento
{ Un byte (8 bits) por cada caracter de la cadena almacenados en bytes contiguos en memoria

z Operaciones
{ longitud(cadena): Entero, regresa la longitud actual de la cadena
z lon(casa) regresa 4

{ Concatenar(cadena1, cadena2): Cadena, concatena dos cadenas


z concatenar(casa, blanca) regresa casablanca
Mayo 2004 Ctedra de Programacin. Programacin 1. 2

Cadenas de caracteres
{subcadena(cadena, inicio, longitud): cadena, regresa la subcadena de cadena que comienza en inicio y que tiene la longitud especificada
z subcadena(casablanca, 3, 2) regresa sa

{indice(cadena1, cadena2): Entero, regresa la posicin de inicio de la primera ocurrencia de cadena2 en cadena1
z indice(casablanca, a) regresa 2

{Las comparaciones (<, >, =, , , ) se efectan segn el orden lexicogrfico dado por el cdigo ASCII
Mayo 2004 Ctedra de Programacin. Programacin 1. 3

Cadena de Caracteres en C/C++


Una cadena de caracteres (string) es un conjunto de caracteres (incluido el blanco) que se almacenan en localidades contiguas de memoria. Se representa como un vector de caracteres donde cada elemento del vector representa un caracter de la cadena. Ejemplo fecha char fecha[11];

1 2 d e M a y o \0
0
Mayo 2004

10
4

Ctedra de Programacin. Programacin 1.

Carcter nulo

Cadena de Caracteres en C/C++


Ntese que una cadena de n caracteres requerir un vector de n+1 elementos, debido al caracter nulo \0que se aade automticamente al final de la cadena. Ejemplo char fecha[11]; fecha
Carcter nulo

1 2 d e M a y o \0
0 1 2 3 4 5 6 7 8 9 10

Cadena de caracteres
Mayo 2004 Ctedra de Programacin. Programacin 1. 5

Cadena de Caracteres en C/C++: Ejemplo 1


Almacenar la cadena Merida en un vector llamado ciudad.
Nro. de Elemento 1 2 3 4 5 6 7 Ciudad Valor del ndice 0 1 2 3 4 5 6 Elemento del vector ciudad[0] ciudad[1] ciudad[2] ciudad[3] ciudad[4] ciudad[5] ciudad[6] Carcter de la cadena M e r i d a \0

M e r i d a \0
0 1 2 3 4 5 6
6

Mayo 2004

Ctedra de Programacin. Programacin 1.

Declaracin de una Cadena de caracteres: Notacin algortmica y en C/C++


Notacin algortmica Cadena nombre[dim] Notacin en C++ char nombre[dim];

donde dim = nro. de caracteres de la cadena + 1 Ejemplos: Cadena linea[81] Cadena color[10]
Mayo 2004

char linea[81]; char color [10];


Ctedra de Programacin. Programacin 1. 7

Declaracin de una Cadena de caracteres en C/C++


Ejemplo #define MAXCAR 256 char palabra[MAXCAR]; Se puede iniciar la cadena de caracteres al declararla: char palabra[MAXCAR] = {H, o, l, a, \0}; char palabra[MAXCAR] = Hola; char palabra[] = Hola; // Longitud mxima de la cadena // es 5 (4 caracteres + \0)
Mayo 2004 Ctedra de Programacin. Programacin 1. 8

// Nmero mximo de caracteres // es 256

Acceso a una Cadena de caracteres en C/C++


z Para tener acceso a los elementos de una cadena se utiliza un subndice . Ejemplo: palabra[0] = H; equivale a subcadena(palabra, 1, 1) palabra[1] = o; equivale a subcadena(palabra, 2, 1) palabra[2] = l; equivale a subcadena(palabra, 3, 1) palabra[3] = a; equivale a subcadena(palabra, 4, 1) palabra[4] = \0; equivale a subcadena(palabra, 5, 1)

Mayo 2004

Ctedra de Programacin. Programacin 1.

Definicin del tipo de dato en C/C++: Cadena de caracteres


z Tipo de datos en C++ #define MAXCAR 256 char palabra[MAXCAR]; z Tipo de datos definido por el usuario Se utiliza la palabra typedef #define MAXCAR 256 // Definicin del tipo cadena typedef char Cadena[MAXCAR]; //Declaracin Cadena palabra;

Mayo 2004

Ctedra de Programacin. Programacin 1.

10

Tipos de datos definidos por el usuario en C/C++


z typedef permite a los usuarios definir nuevos tipos de datos. Una vez definido, se pueden declarar nuevas variables, arreglos, etc,, en trminos de este nuevo tipo de datos. typedef tipo_dato nombre_nuevo_tipo_dato; Ejemplos: typedef int edad; // Definicin del tipo de datos edad

edad hembra, varon; // Declaracin de variables // del tipo de datos edad

Mayo 2004

Ctedra de Programacin. Programacin 1.

11

Tipos de datos definidos por el usuario en C/C++


Ejemplo: typedef float altura altura hombres, mujeres; #define NDIAS 7 #define MAXCAR 10 typedef char Cadena[MAXCAR]; Cadena diasSemana[NDIAS] = {lunes, martes, miercoles, jueves, viernes, sabado, domingo}; // Definicin del tipo de datos altura // Declaracin de variables // del tipo altura

Mayo 2004

Ctedra de Programacin. Programacin 1.

12

Lectura y escritura en C/C++ de una Cadena de caracteres


z Leer una cadena introducida por teclado: cin >> palabra; gets(palabra); z Escribir una cadena en la pantalla: cout << palabra << endl; puts(palabra);

Mayo 2004

Ctedra de Programacin. Programacin 1.

13

Cadena de caracteres: Ejemplo 2


Escribir un programa en C++ que lea una secuencia de caracteres ASCII y escriba una secuencia de caracteres codificados. Si el carcter es una letra o dgito, ser reemplazado por el siguiente carcter en el conjunto de caracteres, excepto Z que ser reemplazado por A, z por a y 9 por 0. Por tanto, 1 se transforma en 2, C en D, p en q, etc. Cualquier carcter que no sea letra o dgito ser reemplazado por un punto (.).

Mayo 2004

Ctedra de Programacin. Programacin 1.

14

Cadena de caracteres: Ejemplo 3


#include <stdio.h> #define MAXCAR 80 void main() { char linea[MAXCAR]; int cont; gets(linea); for (cont = 0; linea[cont] != \0; cont++) if (((linea[cont] >=0) && (linea[cont] < 9)) || ((linea[cont] >=A) && (linea[cont] < Z)) || ((linea[cont] >=a) && (linea[cont] < z)) putchar(linea[cont] + 1); else if (linea[cont] == 9) putchar(0); else if (linea[cont] == Z) putchar(A); else if (linea[cont] == z) putchar(a); else putchar(.)
Ctedra de Programacin. Programacin 1. 15

Mayo 2004

Funciones de manipulacin C/C++ de Cadenas de caracteres


z Funciones de biblioteca que permiten procesar una cadena de caracteres como una entidad completa. z Para usar estas funciones es necesario incluir la biblioteca string.h z Longitud de una cadena (strlen): Devuelve la longitud de una cadena, equivalente a longitud(cadena): Entero lon = strlen(palabra); z Asignacin (strcpy): Copia la segunda cadena en la primera cadena, equivalente a cadena1=cadena2 strcpy (cadena1, cadena2); // cadena1 = cadena2
Mayo 2004 Ctedra de Programacin. Programacin 1. 16

Funciones de manipulacin C/C++ de Cadenas de caracteres


z Comparacin (strcmp): Compara dos cadenas. Si son iguales devuelve 0; si la primera es menor que la segunda devuelve un valor < 0; si la primera es mayor que la segunda devuelve un valor > 0. Equivalente a cadena1{=|<|>}cadena2
if (strcmp(cadena1, cadena2) == 0) // Son iguales if (strcmp(cadena1, cadena2) < 0) // cadena1 < cadena2 if (strcmp(cadena1, cadena2) > 0) // cadena1 > cadena2

Mayo 2004

Ctedra de Programacin. Programacin 1.

17

Funciones de manipulacin C/C++ de Cadenas de caracteres: Ejemplo 4


#include <iostream.h> #include <string.h> #define MAXCAR 256; typedef char Cadena[MAXCAR]; void main () { Cadena s1 = hola, s2 = adios; strcpy(s1, s2); if (strcmp(s1, s2) == 0) cout << Cadenas iguales << endl; else cout << Cadenas diferentes << endl; }
Mayo 2004 Ctedra de Programacin. Programacin 1. 18

Funciones de manipulacin C/C++ de Cadenas de caracteres: Ejemplo 5


z La siguiente funcin encuentra la menor de un conjunto de cadenas de caracteres.
Cadena menorCadena (Cadena cad[]) { int n, elem; char temp[MAXCAR]; n = strlen(cad); temp = cad[0]; for (elem = 1; elem < n; elem++) if (strcmp(temp, cad[elem]) > 0) return temp; }
Mayo 2004 Ctedra de Programacin. Programacin 1. 19

temp = cad[elem];

Cadena de caracteres: Ejemplo 6


z Defina los siguientes tipos de datos: { Un tipo Cadena capaz de almacenar cadenas de hasta 50 caracteres de longitud.
typedef char Cadena[51]; { Una tipo de datos TabCad capaz de almacenar 20 cadenas de hasta 50 caracteres de longitud cada una. typedef Cadena TabCad[20];

Mayo 2004

Ctedra de Programacin. Programacin 1.

20

Cadena de caracteres: Ejemplo 7


z El siguiente procedimiento lee una cadena de caracteres, caracter a caracter, desde el teclado.
void leerCadena (Cadena cad) { int i = 0; char c; c = getchar(); // Lee un caracter del teclado while (c != \n && i < MAXCAR - 1) { cad[i] = c; i++; c = getchar (); } cad[i] = \0; }
Mayo 2004 Ctedra de Programacin. Programacin 1. 21

Ejercicios
1. Escribir un programa en C++ que lea una lnea de texto, la almacene en un vector y la escriba al revs. La longitud de la lnea no ser especificada (terminar al pulsar la tecla Enter), pero se supone que no exceder de 80 caracteres. Escribir la declaracin de las siguientes variables: - Una variable cadena cad con un mximo de 20 caracteres. - La misma variable cad iniciada con el valor Sevilla. - Dos variables nombre y apellido de tipo Cadena. - Un vector nombres de tipo Tabcad. - Un vectpr meses iniciado con los nombres de los doce meses del ao. - Un vector dias_semana iniciado con los nombres de los siete das de la semana.

2.

Mayo 2004

Ctedra de Programacin. Programacin 1.

22

Ejercicios
3. Escribir una funcin logico busca_caracter(Cadena cad, char c) que busque un carcter c en una cadena cad, devolviendo un valor lgico Cierto si lo encuentra y Falso en caso contrario. Escribir una funcin int busca_caracter(Cadena cad, char c) que cuente el nmero de apariciones de un carcter c en una cadena cad, devolvindolo como resultado. Escribir una funcin que reciba como parmetro una cadena de caracteres y elimine los espacios en blanco del final de la cadena.

4.

5.

Mayo 2004

Ctedra de Programacin. Programacin 1.

23

Ejercicios
6. Escribir un procedimiento void dia_semana(int dia, Cadena nomdia) que reciba como parmetro de entrada un nmero del 1 al 7 que representa el da de la semana (1=lunes, 2=martes, 3=miercoles, 4=jueves, 5=viernes, 6=sabado, 7=domingo) y devuelva en la cadena nomdia el nombre de dicho da. Utilice una tabla dias_semana. Escribir un procedimiento que lea una palabra de hasta 20 caracteres y la escriba como se ve en la figura: Entrada: HOLA Salida: HOLA O L L O ALOH
Ctedra de Programacin. Programacin 1. 24

7.

Mayo 2004