Академический Документы
Профессиональный Документы
Культура Документы
Clase Anterior
Estructuras con Estructuras. UML: NOMBRE
dato 1: tipo dato 2: tipo dato 3: ESTRUCTURA dato N: tipo
Declaracin:
struct ESTRUCTURA2 { ESTRUCTURA1 campo; };
Programacin Prof. Gonzalo Mller Clase 21 GM - 2
Clase Anterior
Manejo: variable.campo.campo
Asignacin de la estructura de una estructura
Clase Anterior
Estructuras con Arreglos. NOMBRE UML:
dato 1: tipo dato 2: tipo dato 3: tipo[#] dato N: tipo
Declaracin:
Clase Anterior
Manejo: variable.campo[ndice] Estructura Arreglo:
struct NOMBRE { tipo nombreArreglo[TAMAO]; unsigned tipoentero cantidad; };
Cadenas de Caracteres
1 Carcter!
Programacin Prof. Gonzalo Mller Clase 21 GM - 8
1 Cadena Caracteres!
Programacin Prof. Gonzalo Mller Clase 21 GM - 10
Cadena de Caracteres
Cada carcter representa un elemento de la cadena. Ejemplo:
EL 1 FLACO
Cadena de Caracteres
Cada carcter representa un elemento de la cadena. Ejemplo:
EL 1 FLACO
Texto
Cadena de Caracteres
Cada carcter representa un elemento de la cadena. Ejemplo:
EL 1 FLACO
Carcter
Cadena de Caracteres
Cada carcter representa un elemento de la cadena. Ejemplo:
EL 1 FLACO
Cadena de Caracteres
Arreglo tipo Carcter. Almacena Textos. Como todo arreglo usualmente no se ocupan todos los elementos. Tambin se le conoce como tipo string.
L e n g u a j e
C + +
e s
e l
Me j o r
String
Un string esta definido: Nombre. Tamao: cantidad de caracteres del string.
String
Un string esta definido: Nombre. Tamao: cantidad de caracteres del string. Ejemplo: Se requiere el apellido de un estudiante. String ser: apellido
Variable apellido: carcter [40]
Programacin Prof. Gonzalo Mller Clase 21 GM - 17
String
Un string esta definido: Nombre. Tamao: cantidad de caracteres del string. Ejemplo: Se requiere el apellido de un estudiante. String ser: apellido
Variable apellido: carcter [40]
Programacin Prof. Gonzalo Mller Clase 21 GM - 18
String
Un string esta definido: Nombre. Tamao: cantidad de caracteres del string. Ejemplo: Se requiere el apellido de un estudiante. String ser: apellido
Variable apellido: carcter [40]
Programacin Prof. Gonzalo Mller Clase 21 GM - 19
Strings en C
Declaracin de una variable tipo string:
char identificador[TAMAO]
char identificador1[TAMAO1], identificador2[TAMAO2],
Ejemplo:
// string de 40 caracteres char texto[40]; Tamao
String
Arreglo Cantidad Cantidad ?
String
Arreglo Cantidad Cantidad ?
struct TEXTO{ char texto[40]; unsigned char largo; };
Strings en C
C trabaja con cadenas terminadas en NULL.
40
Strings en C
Strings en C
Se utiliza un carcter no imprimible para indicar el final de la cadena de caracteres. El carcter no imprimible utilizado es primer carcter de la tabla ASCII: 0 00h.
texto Cadena de Tamao N 00h No utilizado 0 N-1 N N+1
No confundir cdigo ASCII 0, tambin conocido como NULL, con la constante carcter `0 (a esta le corresponde el cdigo ASCII 48).
Programacin Prof. Gonzalo Mller Clase 21 GM - 25
40
Strings en C
Strings en C
Para la 1 Cadena se tiene:
texto
Lenguaje C++ es el N1\0,wem8A43% 4&76/ Hasta aqu llega la cadena almacenada
Lenguaje C++ es el Mejor!!!!!! \03% 4&76/ Hasta aqu llega la cadena almacenada
Programacin Prof. Gonzalo Mller Clase 21 GM - 27
Strings en C
En lugar de una estructura arreglo:
struct TEXTO { char texto[40]; char largo; };
40
Strings en C
Ventaja: No tiene limite en el tamao mximo de la cadena. Desventaja: Se desconoce el tamao de la cadena de antemano.
Strings en C
Ventaja: No tiene limite en el tamao mximo de la cadena. Desventaja: Se desconoce el tamao de la cadena de antemano. Ejemplo: Determinar el largo de un string:
unsigned char k, largo; k = 0; while (texto[k] != 0) { k = k + 1; } largo = k;
Programacin Prof. Gonzalo Mller Clase 21 GM - 30
Strings en C
Ventaja: No tiene limite en el tamao mximo de la cadena. Desventaja: Se desconoce el tamao de la cadena de antemano. Ejemplo: Determinar el largo de un string:
unsigned char k, largo; Comparacin contra NULL k = 0; while (texto[k] != 0) { k = k + 1; } largo = k;
Programacin Prof. Gonzalo Mller Clase 21 GM - 31
Strings en C
Utilizando el formato %s es posible realizar la lectura y escritura de un string con scanf y printf. scanf: lee una cadena hasta encontrar:
un espacio en blanco ` , una tabulacin `\t, una tabulacin vertical `\v, un retorno de carro `\r, una nueva lnea `\n, una nueva forma `\f
Strings en C
Ejemplo:
// string de 41 caracteres char texto[41]; scanf(%s, texto); printf(Cadena: %s, texto); Especificadores
Strings en C
Ejemplo:
// string de 41 caracteres char texto[41]; scanf(%s, texto); printf(Cadena: %s, texto); Notar que no se utiliza el operador referencia ya que el identificador por si slo del string es la direccin
Strings en C
Es recomendable incluir el largo mximo que puede tener la cadena a leer en el formato:
%Tamao-1s
Ejemplo: si Tamao es 51 %50s Por lo tanto, si el string es de 51, la cadena mxima que puede ser ingresada es de 50 caracteres y en el carcter 51 se almacena el carcter nulo.
Programacin Prof. Gonzalo Mller Clase 21 GM - 35
Strings en C
De esta forma el usuario no puede ingresar un cadena superior al tamao que sea definido para el string. Ejemplo:
// string de 41 caracteres char texto[41]; scanf(%40s, texto); printf(Cadena: %s, texto);
Strings en C
Otras funciones que pertenecen a stdio para la lectura y escritura de string: gets: Lee una cadena hasta encontrar un \n y sustituye el mismo por el carcter nulo. gets(Variable)
Strings en C
Ejemplo:
// string de 41 caracteres char texto[41]; gets(texto); printf(Cadena: %s, texto); gets no permite validar el tamao de la cadena leda
Strings en C
Ejemplo: Construir un programa estructurado en C para determinar la cantidad de gs contenidas en un texto ingresado por el usuario.
Fase 1: Diseo y Anlisis: DES, DRE DF, LV y CF de Bloque Principal. Fase 2: Codificacin: programa estructurado en C.
Programacin Prof. Gonzalo Mller Clase 21 GM - 39
Ejercicio
Construir un programa estructurado en C para: Determinar la cantidad de vocales contenidas en un texto ingresado por el usuario. Fase 1: Diseo y Anlisis: DES, DRE DF, LV y CF de Bloque Principal. Fase 2: Codificacin: programa estructurado en C.
Evaluacin: Textos y Tiempo
Programacin Prof. Gonzalo Mller Clase 21 GM - 40
Manejo de un Arreglo
Asignacin: El operador asignacin = NO realiza la asignacin de todos los valores del arreglo. NO SE PUEDE ASIGNAR UN ARREGLO A OTRO CON EL OPERADOR ASIGNACIN Ejemplo:
char nombre1[40], nombre2[40]; nombre2 = nombre1; NO COPIA EL STRING(ARREGLO) nombre1 a nombre2
Strings en C
Recomendacin: Definir una constante simblica para establecer el tamao del string. Definir una constante simblica para establecer el formato de lectura para scanf. Ejemplo:
#define MAXTXT 41 #define FORMATOTXT %40s char texto[41]; char texto[MAXTXT]; scanf(%40s,texto); scanf(FORMATOTXT,texto); scanf(%40s,texto); scanf(FORMATOTXT,texto); Al menos es necesario cambiar aquProgramacin Prof. Gonzalo Mller Clase 21 GM - 42
String en Mdulos
modulo(variable1, )
Entrada y Retorno
modulo(variable1, ) modulo(cadena, )
Constante cadena de caracteres de tamao menor o igual al de parmetro1
Programacin Prof. Gonzalo Mller Clase 21 GM - 45
void escribeTexto(char texto[50]); main() { char cadena1[50]; char cadena2[25]; Argumento Variable escribeTexto(cadena1); escribeTexto(cadena2); escribeTexto(C++ es el Mejor!!); }
Argumento Constante
Strings en C
Ejemplo: Construir un programa modular en C con acoplamiento de datos para determinar la cantidad de gs contenidas en un texto ingresado por el usuario.
Fase 1: Diseo y Anlisis: DES y DTD. DES, DRE DF de Mdulos y TM. DRE DF, LV y CF de Bloque Principal. Fase 2: Codificacin: programa modular en C.
Programacin Prof. Gonzalo Mller Clase 21 GM - 47
Ejercicio
Construir un programa modular en C con acoplamiento de datos para: Determinar la cantidad de vocales contenidas en un texto ingresado por el usuario. Fase 1: Diseo y Anlisis: DES y DTD. DES, DRE DF de Mdulos y TM. DRE DF, LV y CF de Bloque Principal. Fase 2: Codificacin: programa modular en C.
Evaluacin: Textos y Tiempo
Programacin Prof. Gonzalo Mller Clase 21 GM - 48
Arreglo de Strings
Declaracin
char identificador[TAMAO1] [TAMAO2] (TAMAOx: Siempre es una constante)
Arreglo de Strings
Declaracin
char identificador[TAMAO1] [TAMAO2] (TAMAOx: Siempre es una constante) Tamao Arreglo
Arreglo de Strings
Declaracin
char identificador[TAMAO1] [TAMAO2] (TAMAOx: Siempre es una constante) Tamao de Strings
Arreglo de Strings
Declaracin
char identificador[TAMAO1] [TAMAO2] (TAMAOx: Siempre es una constante)
Ejemplo:
// Arreglo de 80 apellidos de 40 caracteres char apellidos[80][40]; Tamao de Arreglo
Programacin Prof. Gonzalo Mller Clase 21 GM - 52
Arreglo de Strings
Declaracin
char identificador[TAMAO1] [TAMAO2] (TAMAOx: Siempre es una constante)
Ejemplo:
// Arreglo de 80 apellidos de 40 caracteres char apellidos[80][40]; Tamao de Strings
Programacin Prof. Gonzalo Mller Clase 21 GM - 53
Arreglo de Strings
Manejo identificador[indice1] [indice2]
Arreglo de Strings
Manejo identificador[indice1] [indice2]
Cadena indice1
Arreglo de Strings
Manejo identificador[indice1] [indice2]
Carcter indice2
Cantidad.
Tamao. Variable Entera sin Signo. Define los elementos a ocupar del arreglo de strings.
Bucle.
Permite desplazarse a travs del arreglo de strings.
Contador.
< Cantidad. Indica el string del arreglo a acceder.
Programacin Prof. Gonzalo Mller Clase 21 GM - 59
Fase 1: Diseo y Anlisis: DES y DTD. DES, DRE DF de Mdulos y TM. DRE DF, LV y CF de Bloque Principal. Fase 2: Codificacin: programa modular en C.
Programacin Prof. Gonzalo Mller Clase 21 GM - 60
Ejercicio
Disear y construir un programa modular en C que lea N textos, determine el cuantas vocales tiene cada uno y escriba en la salida en forma inversa a como fueron ingresados. Fase 1: Diseo y Anlisis: DES y DTD. DES, DRE DF de Mdulos y TM. DRE DF, LV y CF de Bloque Principal. Fase 2: Codificacin: programa modular en C.
Programacin Prof. Gonzalo Mller Clase 21 GM - 61
string
Ejercicio
Construir un programa modular en C++ para: Leer 1 polgono (Nombre, N de lados, longitud de un lado, apotema) y escribir en la salida. Fase 1: Diseo y Anlisis: DTD y UML DES, DRE DF, LV y CF de Mdulos y TM. DES, DRE DF, LV y CF de Bloque Principal. Fase 2: Codificacin: programa modular en C++.
Evaluacin: Textos y Tiempo
Programacin Prof. Gonzalo Mller Clase 21 GM - 63
Ejercicio
Construir un programa modular en C++ para: Leer N polgonos (Nombre, N identificador, N de lados, longitud de un lado, apotema) y escribir en la salida de forma inversa. Fase 1: Diseo y Anlisis: DTD y UML DES, DRE DF, LV y CF de Mdulos y TM. DES, DRE DF, LV y CF de Bloque Principal. Fase 2: Codificacin: programa modular en C++.
Evaluacin: Textos y Tiempo
Programacin Prof. Gonzalo Mller Clase 21 GM - 64
Ejercicio
Disear y construir un programa modular en C que lea una cadena de caracteres y determine el largo y cuantos espacios tiene. Fase 1: Diseo y Anlisis: DTD DES, DRE DF, LV y CF de Mdulos y TM. DES, DRE DF, LV y CF de Bloque Principal. Fase 2: Codificacin: programa modular en C.
Programacin Prof. Gonzalo Mller Clase 21 GM - 65
Ejercicio
Construir un programa modular C++ para: Leer una lista de materias (nombre, cdigo y unidades de crdito) y escribir en la salida de forma inversa. Fase 1: Diseo y Anlisis: DTD y UML DES, DRE DF, LV y CF de Mdulos y TM. DES, DRE DF, LV y CF de Bloque Principal. Fase 2: Codificacin: programa modular en C++.
Evaluacin: Textos y Tiempo
Programacin Prof. Gonzalo Mller Clase 21 GM - 66
Ejercicio
Construir un programa en C para: a) Leer una cadena de caracteres y: 1) Determine si es palndromo. 2) Cree una copia. 3) Escriba en pantalla en forma inversa. 4) Determinar el nmero de veces que aparece un carcter dado. b) Leer dos cadenas de caracteres y determine: 1) Si son iguales. 2) Si al invertir alguna son iguales. c) Realizar la misma funcionalidad de gets pero con tamao mximo.
Programacin Prof. Gonzalo Mller Clase 21 GM - 67
Resumen
Cadenas de Caracteres. Declaracin de una variable string. String en C. Lectura y Escritura de un string en C. scanf, printf. gets. String como parmetro. Arreglos de string. Estructuras con string.
Programacin Prof. Gonzalo Mller Clase 21 GM - 68
Lectura Extra
Manejo de un String
Historia
Cadena de Caracteres
Se tienen las siguientes constantes: Lenguaje C++ es el N1 22 Caracteres Lenguaje C++ es el Mejor 24 Caracteres Lenguaje C++ es el Mejor!!!!!! 30 Caracteres Todas estas cadenas pueden ser almacenadas en el arreglo de texto de 40 caracteres
Cadena de Caracteres
Ejemplo: Una forma de leer por teclado cualquiera de stas cadena de caracteres sera:
char texto[40]; unsigned char k; char leido; // k = 0; do { leido = getchar(); texto[k] = leido; k = k + 1; } while(leido != '\n');
Programacin Prof. Gonzalo Mller Clase 21 GM - 71
Cadena de Caracteres
Ejemplo: El siguiente cdigo permite escribir en pantalla en contenido del arreglo texto sera:
unsigned char k; // k = 0; while (k != 40) { printf(%c, texto[k]); k = k + 1; }
Cadena de Caracteres
Al comenzar la ejecucin del programa, en memoria el arreglo de 40 caracteres contendr cualquier valor, por ejemplo:
texto hW.q1^3ft=# 0l; /Aq @,wem8A43% 4&76/*
Por lo tanto,
Cadena de Caracteres
Si se almacena el 1 string en texto : Lenguaje C++ es el N1 Se escribira en pantalla: Lenguaje C++ es el N1@,wem8A43% 4&76/*
Cadena de 22 caracteres Restantes 18 caracteres
Si se almacena el 2 string en texto: Lenguaje C++ es el Mejor Se escribira en pantalla: Lenguaje C++ es el Mejorwem8A43% 4&76/*
Programacin Prof. Gonzalo Mller Clase 21 GM - 74
Cadena de Caracteres
Si se almacena el 3 string en texto : Lenguaje C++ es el Mejor!!!!!! Se escribira en pantalla: Lenguaje C++ es el Mejor!!!!!!43% 4&76/*
Cadena de 30 Caracteres Restantes 10 Caracteres
Es necesario establecer una forma de indicar el final o el tamao de la cadena almacenada en el string !
Programacin Prof. Gonzalo Mller Clase 21 GM - 75
Cadena de Caracteres
Formas de manejar de un string: 1. Se podra manejar como estructura arreglo, utilizando un campo para almacenar la cantidad de caracteres. CADENA char texto[40]; unsigned char largo;
Cadena de Caracteres
Para la 1 Cadena se tiene:
texto
Lenguaje C++ es el N1@,wem8A43% 4&76/
largo = 22
largo = 24
largo = 30
Programacin Prof. Gonzalo Mller Clase 21 GM - 77
Cadena de Caracteres
Ejemplo: leer una cadena:
CADENA cadena1; char leido; cadena1.ucLargo = 0; do { leido = getchar(); cadena1.texto[cadena1.ucLargo]=leido; cadena1.ucLargo = cadena1.ucLargo + 1; } while(leido!= \n);
Desventajas:
Se utilizan dos variables.
Programacin Prof. Gonzalo Mller Clase 21 GM - 78
Cadena de Caracteres
2. Se podra rellenar con espacios el resto del string o lo que es lo mismo inicializar el arreglo con espacios.
texto
32 1
32 2
32 3 38 39
32 40
Cadena de Caracteres
Para la 1 Cadena se tiene:
texto
Lenguaje C++ es el N1
18 caracteres espacios
16 caracteres espacios
10 caracteres espacios
Cadena de Caracteres
Ejemplo: El siguiente cdigo permite inicializar el string:
unsigned char k; k = 0; while (k < 40) { texto[k] = 32; // ` k = k + 1; }
Desventajas:
Se escriben espacios innecesarios. Se desconoce el tamao de la cadena almacenada.
Programacin Prof. Gonzalo Mller Clase 21 GM - 81
Cadena de Caracteres
3. Tomar el primer elemento del arreglo de caracteres para almacenar el tamao.
texto
39
Cadena de Caracteres
Para la 1 Cadena se tiene:
texto
22 Lenguaje C++ es el N1@,wem8A43% 4&76/
39
39
39
Cadena de Caracteres
Ejemplo: Se podra leer una cadena a travs del siguiente cdigo:
unsigned char k; char leido; k = 1; do { leido = getchar(); texto[k] = leido; k = k + 1; Se calcula Tamao }while(leido != \n); Se almacena Tamao texto[0] = k;
Programacin Prof. Gonzalo Mller Clase 21 GM - 84
Cadena de Caracteres
Ejemplo: Se podra escribir en pantalla en contenido del arreglo texto a travs del siguiente cdigo:
unsigned char k; k = 1; while (k < texto[0]) { printf(%c, texto[k]); k = k + 1; }
Cadena de Caracteres
4. Se utiliza un carcter salto de lnea para indicar el final de la cadena de caracteres.
40
Cadena de Caracteres
Para la 1 Cadena se tiene:
texto
Lenguaje C++ es el N1\n,wem8A43% 4&76/ Hasta aqu llega la cadena almacenada
Lenguaje C++ es el Mejor!!!!!! \n3% 4&76/ Hasta aqu llega la cadena almacenada
Programacin Prof. Gonzalo Mller Clase 21 GM - 87
Cadena de Caracteres
Ejemplo: Utilizando el carcter \n, el cdigo para escribir en pantalla sera:
unsigned char k; k = 0; while (texto[k] != \n) { printf(%c, texto[k]); k = k + 1; }
Ventaja: No tiene limite en el tamao mximo de la cadena. Desventajas: Se desconoce el tamao de la cadena de antemano. La cadena no puede contener \n
Programacin Prof. Gonzalo Mller Clase 21 GM - 88
Cadena de Caracteres
5. Se utiliza un carcter no imprimible para indicar el final de la cadena de caracteres. El carcter no imprimible utilizado es primer carcter de la tabla ASCII: 0 00h.
texto Cadena de Tamao N 00h No utilizado 0 N-1 N N+1
No confundir cdigo ASCII 0, tambin conocido como NULL, con la constante carcter `0 (a esta le corresponde el cdigo ASCII 48).
Programacin Prof. Gonzalo Mller Clase 21 GM - 89
40
Cadena de Caracteres
Para la 1 Cadena se tiene:
texto
Lenguaje C++ es el N1\0,wem8A43% 4&76/ Hasta aqu llega la cadena almacenada
Lenguaje C++ es el Mejor!!!!!! \03% 4&76/ Hasta aqu llega la cadena almacenada
Programacin Prof. Gonzalo Mller Clase 21 GM - 90
Cadena de Caracteres
Ejemplo: Se podra leer una cadena a travs del siguiente cdigo:
unsigned char k; char leido; k = 0; do { leido = getchar(); texto[k] = leido; k = k + 1; }while(leido != \n); texto[k] = 0;
Se almacena Final
Cadena de Caracteres
Ejemplo: Utilizando el carcter NULL, el cdigo para escribir en pantalla sera:
unsigned char k; k = 0; while (texto[k] != 0) { printf(%c, texto[k]); k = k + 1; }
Ventaja: No tiene limite en el tamao mximo de la cadena. Desventaja: Se desconoce el tamao de la cadena de antemano.
Programacin Prof. Gonzalo Mller Clase 21 GM - 92