Descripción: Clase 21 de Programación, Prof. Gonzalo Müller
Programación
Clase 21. Strings Prof. Gonzalo Müller
[email protected]
Facultad de Ingeniería Universidad Central de Venezuela
Clase Anterior
Estructuras con Estructuras. UML:
NOMBRE dato 1: tipo dato 2: tipo dato 3: ESTRUCTURA … dato N: tipo
Declaración: struct ESTRUCTURA2 { ESTRUCTURA1 campo; … }; Programación – Prof. Gonzalo Müller – Clase 21 – GM - 2
Clase Anterior Manejo: variable.campo.campo
Asignación de la estructura de una estructura
Estructuras Anidadas.
Arreglos de Estructuras. Declaración: ESTRUCTURA nombre[TAMAÑO] Manejo: variable[índice].campo Programación – Prof. Gonzalo Müller – Clase 21 – GM - 3
Clase Anterior
Estructuras con Arreglos. UML:
NOMBRE
Declaración:
dato 1: tipo dato 2: tipo dato 3: tipo[#] … dato N: tipo
struct ESTRUCTURA { tipo campo[TAMAÑO]; … }; Programación – Prof. Gonzalo Müller – Clase 21 – GM - 4
Clase Anterior Manejo: variable.campo[índice] Estructura Arreglo: struct NOMBRE { tipo nombreArreglo[TAMAÑO]; unsigned tipoentero cantidad; };
Beneficios: Copia de arreglos, Retorno de arreglos. Programación – Prof. Gonzalo Müller – Clase 21 – GM - 5
Cadenas de Caracteres
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 6
Constantes Cadena de Caracteres
Constante Carácter: Cualquier carácter encerrado entre apostrofes. `A´ `1´
`q´
`;´
`ñ´
`)´
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 7
`´
…
Constantes Cadena de Caracteres
Constante Carácter: Cualquier carácter encerrado entre apostrofes. `A´ `1´
`q´
`;´
`ñ´
`)´
`´
…
1 Carácter! Programación – Prof. Gonzalo Müller – Clase 21 – GM - 8
Constantes Cadena de Caracteres
Constante Cadena de Caracteres: Cualquier conjunto de caracteres encerrado entre comillas. “Lenguaje C++ es el Mejor”
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 9
Constantes Cadena de Caracteres
Constante Cadena de Caracteres: Cualquier conjunto de caracteres encerrado entre comillas. “Lenguaje C++ es el Mejor”
1 Cadena Caracteres! Programación – Prof. Gonzalo Müller – Clase 21 – GM - 10
Cadena de Caracteres
Cada carácter representa un elemento de la cadena. Ejemplo:
“EL 1º FLACO”
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 11
Cadena de Caracteres
Cada carácter representa un elemento de la cadena. Ejemplo:
“EL 1º FLACO”
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 12
Texto
Cadena de Caracteres
Cada carácter representa un elemento de la cadena. Ejemplo:
“EL 1º FLACO” Carácter
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 13
Cadena de Caracteres
Cada carácter representa un elemento de la cadena. Ejemplo:
“EL 1º FLACO”
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 14
Cadena de Caracteres Arreglo tipo Carácter. Almacena Textos. Como todo arreglo usualmente no se ocupan todos los elementos. También se le conoce como tipo string.
L e n g u a j e
C + +
e s
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 15
e l
Me j o r
String
Un string esta definido: Nombre. Tamaño: cantidad de caracteres del string.
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 16
String
Un string esta definido: Nombre. Tamaño: cantidad de caracteres del string. Ejemplo: Se requiere el apellido de un estudiante. String será: apellido
Variable apellido: carácter [40] … Programación – Prof. Gonzalo Müller – Clase 21 – GM - 17
String
Un string esta definido: Nombre. Tamaño: cantidad de caracteres del string. Ejemplo: Se requiere el apellido de un estudiante. String será: apellido
Variable apellido: carácter [40] … Programación – Prof. Gonzalo Müller – Clase 21 – GM - 18
String
Un string esta definido: Nombre. Tamaño: cantidad de caracteres del string. Ejemplo: Se requiere el apellido de un estudiante. String será: apellido
Variable apellido: carácter [40] … Programación – Prof. Gonzalo Müller – Clase 21 – GM - 19
Strings en C
Declaración de una variable tipo string: char identificador[TAMAÑO] char identificador1[TAMAÑO1], identificador2[TAMAÑO2],…
(TAMAÑO: Siempre es una constante)
Ejemplo: // string de 40 caracteres char texto[40]; Tamaño
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 20
String Arreglo → Cantidad ¿ Cantidad ?
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 21
String Arreglo → Cantidad ¿ Cantidad ?
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 22
struct TEXTO{ char texto[40]; unsigned char largo; };
Strings en C
C trabaja con cadenas terminadas en NULL. texto Cadena de Tamaño N 00h No utilizado 0 N-1 N N+1
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 23
40
Strings en C
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 24
Strings en C Se utiliza un carácter no imprimible para indicar el final de la cadena de caracteres. El carácter no imprimible utilizado es primer carácter de la tabla ASCII: 0 ó 00h. texto Cadena de Tamaño N 00h No utilizado 0 N-1 N N+1 No confundir código ASCII 0, también conocido como NULL, con la constante carácter `0´ (a esta le corresponde el código ASCII 48). Programación – Prof. Gonzalo Müller – Clase 21 – GM - 25
40
Strings en C
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 26
Strings en C Para la 1º Cadena se tiene: texto Lenguaje C++ es el Nº1\0,wem8¬A43%·4&76/ Hasta aquí llega la cadena almacenada
Para la 2º Cadena se tiene: texto
Lenguaje C++ es el Mejor\0em8¬A43%·4&76/ Hasta aquí llega la cadena almacenada
Para la 3º Cadena se tiene: texto
Lenguaje C++ es el Mejor!!!!!! \03%·4&76/ Hasta aquí llega la cadena almacenada Programación – Prof. Gonzalo Müller – Clase 21 – GM - 27
Strings en C En lugar de una estructura arreglo: struct TEXTO { char texto[40]; char largo; };
El carácter NULL indica el final de la cadena: char texto[40];
texto Cadena de Tamaño N 00h No utilizado 0 N-1 N N+1 Programación – Prof. Gonzalo Müller – Clase 21 – GM - 28
40
Strings en C
Ventaja: No tiene limite en el tamaño máximo de la cadena.
Desventaja: Se desconoce el tamaño de la cadena de antemano.
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 29
Strings en C
Ventaja: No tiene limite en el tamaño máximo de la cadena.
Desventaja: Se desconoce el tamaño 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; Programación – Prof. Gonzalo Müller – Clase 21 – GM - 30
Strings en C
Ventaja: No tiene limite en el tamaño máximo de la cadena.
Desventaja: Se desconoce el tamaño de la cadena de antemano. Ejemplo: Determinar el largo de un string: unsigned char k, largo; Comparación contra NULL k = 0; while (texto[k] != 0) { k = k + 1; } largo = k; Programación – Prof. Gonzalo Müller – 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 tabulación `\t´, una tabulación vertical `\v´, un retorno de carro `\r´, una nueva línea `\n´, una nueva forma `\f´
carácter que se sustituye por el carácter nulo en la cadena.
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 32
Strings en C Ejemplo: // string de 41 caracteres char texto[41]; scanf(“%s”, texto); printf(“Cadena: %s”, texto); Especificadores
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 33
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 sólo del string es la dirección
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 34
Strings en C Es recomendable incluir el largo máximo que puede tener la cadena a leer en el formato: %Tamaño-1s
Ejemplo: si Tamaño es 51 → %50s Por lo tanto, si el string es de 51, la cadena máxima que puede ser ingresada es de 50 caracteres y en el carácter 51 se almacena el carácter nulo. Programación – Prof. Gonzalo Müller – Clase 21 – GM - 35
Strings en C De esta forma el usuario no puede ingresar un cadena superior al tamaño que sea definido para el string. Ejemplo: // string de 41 caracteres char texto[41]; scanf(“%40s”, texto); printf(“Cadena: %s”, texto);
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 36
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 carácter nulo. gets(Variable)
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 37
Strings en C Ejemplo: // string de 41 caracteres char texto[41]; gets(texto); printf(“Cadena: %s”, texto); gets no permite validar el tamaño de la cadena leída
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 38
Strings en C Ejemplo: Construir un programa estructurado en C para determinar la cantidad de ‘g’s contenidas en un texto ingresado por el usuario.
Fase 1: Diseño y Análisis: DES, DRE ó DF, LV y CF de Bloque Principal. Fase 2: Codificación: programa estructurado en C. Programación – Prof. Gonzalo Müller – 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: Diseño y Análisis: DES, DRE ó DF, LV y CF de Bloque Principal. Fase 2: Codificación: programa estructurado en C. Evaluación: Textos y Tiempo Programación – Prof. Gonzalo Müller – Clase 21 – GM - 40
Manejo de un Arreglo
Asignación: El operador asignación = NO realiza la asignación de todos los valores del arreglo. NO SE PUEDE ASIGNAR UN ARREGLO A OTRO CON EL OPERADOR ASIGNACIÓN Ejemplo: char nombre1[40], nombre2[40]; … nombre2 = nombre1; NO COPIA EL STRING(ARREGLO) nombre1 a nombre2
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 41
Strings en C
Recomendación: Definir una constante simbólica para establecer el tamaño del string. Definir una constante simbólica 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 aquíProgramación – Prof. Gonzalo Müller…– Clase 21 – GM - 42
String en Módulos
String como retorno NO SE PUEDE RETORNA UN STRING(ARREGLO)
String como parámetros
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 43
String como parámetro Declaración y Definición … modulo(char parámetro1[TAMAÑO], …) Llamada:
Variable cadena de caracteres de tamaño menor o igual al de parámetro1
… modulo(variable1, …)
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 44
Entrada y Retorno
String como parámetro Declaración y Definición … modulo(char parámetro1[TAMAÑO], …) Llamada:
Variable cadena de caracteres de tamaño menor o igual al de parámetro1
… modulo(variable1, …) … modulo(cadena, …) Constante cadena de caracteres de tamaño menor o igual al de parámetro1 Programación – Prof. Gonzalo Müller – Clase 21 – GM - 45
Entrada y Retorno Sólo Entrada
String como parámetro Ejemplo:
Cadena como parámetro de entrada
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
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 46
Strings en C Ejemplo: Construir un programa modular en C con acoplamiento de datos para determinar la cantidad de ‘g’s contenidas en un texto ingresado por el usuario.
Fase 1: Diseño y Análisis: DES y DTD. DES, DRE ó DF de Módulos y TM. DRE ó DF, LV y CF de Bloque Principal. Fase 2: Codificación: programa modular en C. Programación – Prof. Gonzalo Müller – 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: Diseño y Análisis: DES y DTD. DES, DRE ó DF de Módulos y TM. DRE ó DF, LV y CF de Bloque Principal. Fase 2: Codificación: programa modular en C. Evaluación: Textos y Tiempo Programación – Prof. Gonzalo Müller – Clase 21 – GM - 48
Arreglo de Strings
Declaración char identificador[TAMAÑO1] [TAMAÑO2] (TAMAÑOx: Siempre es una constante)
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 49
Arreglo de Strings
Declaración char identificador[TAMAÑO1] [TAMAÑO2] (TAMAÑOx: Siempre es una constante) Tamaño Arreglo
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 50
Arreglo de Strings
Declaración char identificador[TAMAÑO1] [TAMAÑO2] (TAMAÑOx: Siempre es una constante) Tamaño de Strings
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 51
Arreglo de Strings
Declaración char identificador[TAMAÑO1] [TAMAÑO2] (TAMAÑOx: Siempre es una constante)
Ejemplo: // Arreglo de 80 apellidos de 40 caracteres char apellidos[80][40]; Tamaño de Arreglo Programación – Prof. Gonzalo Müller – Clase 21 – GM - 52
Arreglo de Strings
Declaración char identificador[TAMAÑO1] [TAMAÑO2] (TAMAÑOx: Siempre es una constante)
Ejemplo: // Arreglo de 80 apellidos de 40 caracteres char apellidos[80][40]; Tamaño de Strings Programación – Prof. Gonzalo Müller – Clase 21 – GM - 53
Arreglo de Strings
Manejo identificador[indice1] [indice2]
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 54
Arreglo de Strings
Manejo identificador[indice1] [indice2] Cadena indice1
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 55
Arreglo de Strings
Manejo identificador[indice1] [indice2] Carácter indice2
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 56
Manejo de un Arreglo de Strings Ejemplo: // Arreglo de 80 apellidos de 40 caracteres char apellidos[80][40]; apellido k … apellido k scanf(“%39s”, apellidos[k]); printf(“Apellido %u:%s”, k, apellidos[k]); printf(“Inicial:%c”, apellidos[k][0]); 1º carácter
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 57
Manejo de un Arreglo de Strings Ejemplo: // Arreglo de 80 apellidos de 40 caracteres char apellidos[80][40]; Lee apellido k … Escribe apellido k scanf(“%39s”, apellidos[k]); printf(“Apellido %u:%s”, k, apellidos[k]); printf(“Inicial:%c”, apellidos[k][0]); Escribe inicial del apellido
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 58
Manejo de un Arreglo de Strings
Elementos indispensables en el manejo de un arreglo de strings: Tipo. Tamaño.
Constante Entera sin Signo. Debe ser sobredimensionado.
Cantidad.
≤ Tamaño. Variable Entera sin Signo. Define los elementos a ocupar del arreglo de strings.
Bucle.
Permite desplazarse a través del arreglo de strings.
Contador.
< Cantidad. Indica el string del arreglo a acceder. Programación – Prof. Gonzalo Müller – Clase 21 – GM - 59
Manejo de un Arreglo de String Ejemplo: Diseñar y construir modular en C que lea un conjunto de N nombres y los muestre en la salida en forma inversa a como fueron ingresados.
Fase 1: Diseño y Análisis: DES y DTD. DES, DRE ó DF de Módulos y TM. DRE ó DF, LV y CF de Bloque Principal. Fase 2: Codificación: programa modular en C. Programación – Prof. Gonzalo Müller – Clase 21 – GM - 60
Ejercicio
Diseñar 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: Diseño y Análisis: DES y DTD. DES, DRE ó DF de Módulos y TM. DRE ó DF, LV y CF de Bloque Principal. Fase 2: Codificación: programa modular en C. Programación – Prof. Gonzalo Müller – Clase 21 – GM - 61
Estructuras con String
Las estructuras pueden ser representadas gráficamente utilizando UML (Unified Modeling Language): NOMBRE dato1: tipo dato2: tipo dato3: carácter[#] … datoN: tipo
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 62
string
Ejercicio
Construir un programa modular en C++ para: Leer 1 polígono (Nombre, Nº de lados, longitud de un lado, apotema) y escribir en la salida. Fase 1: Diseño y Análisis: DTD y UML DES, DRE ó DF, LV y CF de Módulos y TM. DES, DRE ó DF, LV y CF de Bloque Principal. Fase 2: Codificación: programa modular en C++. Evaluación: Textos y Tiempo Programación – Prof. Gonzalo Müller – Clase 21 – GM - 63
Ejercicio
Construir un programa modular en C++ para: Leer N polígonos (Nombre, Nº identificador, Nº de lados, longitud de un lado, apotema) y escribir en la salida de forma inversa. Fase 1: Diseño y Análisis: DTD y UML DES, DRE ó DF, LV y CF de Módulos y TM. DES, DRE ó DF, LV y CF de Bloque Principal. Fase 2: Codificación: programa modular en C++. Evaluación: Textos y Tiempo Programación – Prof. Gonzalo Müller – Clase 21 – GM - 64
Ejercicio
Diseñar y construir un programa modular en C que lea una cadena de caracteres y determine el largo y cuantos espacios tiene. Fase 1: Diseño y Análisis: DTD DES, DRE ó DF, LV y CF de Módulos y TM. DES, DRE ó DF, LV y CF de Bloque Principal. Fase 2: Codificación: programa modular en C. Programación – Prof. Gonzalo Müller – Clase 21 – GM - 65
Ejercicio
Construir un programa modular C++ para: Leer una lista de materias (nombre, código y unidades de crédito) y escribir en la salida de forma inversa. Fase 1: Diseño y Análisis: DTD y UML DES, DRE ó DF, LV y CF de Módulos y TM. DES, DRE ó DF, LV y CF de Bloque Principal. Fase 2: Codificación: programa modular en C++. Evaluación: Textos y Tiempo Programación – Prof. Gonzalo Müller – Clase 21 – GM - 66
Ejercicio Construir un programa en C para: a) Leer una cadena de caracteres y: 1) Determine si es palíndromo. 2) Cree una copia. 3) Escriba en pantalla en forma inversa. 4) Determinar el número de veces que aparece un carácter 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 tamaño máximo. Programación – Prof. Gonzalo Müller – Clase 21 – GM - 67
Resumen
Cadenas de Caracteres. Declaración de una variable string. String en C. Lectura y Escritura de un string en C. scanf, printf. gets.
String como parámetro. Arreglos de string. Estructuras con string. Programación – Prof. Gonzalo Müller – Clase 21 – GM - 68
Lectura Extra
Manejo de un String Historia
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 69
Cadena de Caracteres Se tienen las siguientes constantes: “Lenguaje C++ es el Nº1” → 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
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 70
Cadena de Caracteres Ejemplo: Una forma de leer por teclado cualquiera de éstas cadena de caracteres sería: char texto[40]; unsigned char k; char leido; // k = 0; do { leido = getchar(); texto[k] = leido; k = k + 1; } while(leido != '\n'); Programación – Prof. Gonzalo Müller – Clase 21 – GM - 71
Cadena de Caracteres Ejemplo: El siguiente código permite escribir en pantalla en contenido del arreglo texto sería: unsigned char k; // k = 0; while (k != 40) { printf(“%c”, texto[k]); k = k + 1; }
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 72
Cadena de Caracteres
Al comenzar la ejecución del programa, en memoria el arreglo de 40 caracteres contendrá cualquier valor, por ejemplo: texto hW.q1^”3ft=# 0l; /Aªq @,wem8¬A43%·4&76/*
Por lo tanto,
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 73
Cadena de Caracteres Si se almacena el 1º string en texto : “Lenguaje C++ es el Nº1” Se escribiría en pantalla: Lenguaje C++ es el Nº1@,wem8¬A43%·4&76/* Cadena de 22 caracteres
Restantes 18 caracteres
Si se almacena el 2º string en texto: “Lenguaje C++ es el Mejor” Se escribiría en pantalla: Lenguaje C++ es el Mejorwem8¬A43%·4&76/* Programación – Prof. Gonzalo Müller – Clase 21 – GM - 74
Cadena de Caracteres Si se almacena el 3º string en texto : “Lenguaje C++ es el Mejor!!!!!!” Se escribiría 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 tamaño de la cadena almacenada en el string ! Programación – Prof. Gonzalo Müller – Clase 21 – GM - 75
Cadena de Caracteres
Formas de manejar de un string: 1. Se podría manejar como estructura arreglo, utilizando un campo para almacenar la cantidad de caracteres. CADENA char texto[40]; unsigned char largo;
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 76
Cadena de Caracteres Para la 1º Cadena se tiene: texto
Lenguaje C++ es el Nº1@,wem8¬A43%·4&76/
largo = 22
Para la 2º Cadena se tiene: texto Lenguaje C++ es el Mejorwem8¬A43%·4&76/
largo = 24
Para la 3º Cadena se tiene: texto Lenguaje C++ es el Mejor!!!!!!43%·4&76/
largo = 30 Programación – Prof. Gonzalo Müller – 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. Programación – Prof. Gonzalo Müller – Clase 21 – GM - 78
Cadena de Caracteres 2. Se podría rellenar con espacios el resto del string o lo que es lo mismo inicializar el arreglo con espacios. texto
32
32
32
1
2
3
32 38
Código ASCII de espacio
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 79
39
40
Cadena de Caracteres Para la 1º Cadena se tiene: texto Lenguaje C++ es el Nº1
Para la 2º Cadena se tiene:
18 caracteres espacios
texto Lenguaje C++ es el Mejor
Para la 3º Cadena se tiene:
16 caracteres espacios
texto Lenguaje C++ es el Mejor!!!!!! 10 caracteres espacios
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 80
Cadena de Caracteres Ejemplo: El siguiente código 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 tamaño de la cadena almacenada. Programación – Prof. Gonzalo Müller – Clase 21 – GM - 81
Cadena de Caracteres 3. Tomar el primer elemento del arreglo de caracteres para almacenar el tamaño. texto
0
1
39
texto[0]: Tamaño de la cadena de caracteres almacenada
texto[1]…texto[39]: Cadena de caracteres almacenada
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 82
Cadena de Caracteres Para la 1º Cadena se tiene: texto 22
Lenguaje C++ es el Nº1@,wem8¬A43%·4&76/
0
1
Para la 2º Cadena se tiene:
39
texto 24
Lenguaje C++ es el Mejorwem8¬A43%·4&76/
0
1
Para la 3º Cadena se tiene:
39
texto 30
Lenguaje C++ es el Mejor!!!!!!43%·4&76/
0
1
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 83
39
Cadena de Caracteres Ejemplo: Se podría leer una cadena a través del siguiente código: unsigned char k; char leido; k = 1; do { leido = getchar(); texto[k] = leido; k = k + 1;
Se calcula Tamaño
}while(leido != ‘\n’); Se almacena Tamaño texto[0] = k; Programación – Prof. Gonzalo Müller – Clase 21 – GM - 84
Cadena de Caracteres Ejemplo: Se podría escribir en pantalla en contenido del arreglo texto a través del siguiente código: unsigned char k; k = 1; while (k < texto[0]) { printf(“%c”, texto[k]); k = k + 1; }
Desventaja: El tamaño máximo de la cadena puede ser de 255. Programación – Prof. Gonzalo Müller – Clase 21 – GM - 85
Cadena de Caracteres 4. Se utiliza un carácter salto de línea para indicar el final de la cadena de caracteres.
texto Cadena de Tamaño N ‘\n’ No utilizado 0 N-1 N N+1
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 86
40
Cadena de Caracteres Para la 1º Cadena se tiene: texto Lenguaje C++ es el Nº1\n,wem8¬A43%·4&76/ Hasta aquí llega la cadena almacenada
Para la 2º Cadena se tiene: texto
Lenguaje C++ es el Mejor\nem8¬A43%·4&76/ Hasta aquí llega la cadena almacenada
Para la 3º Cadena se tiene: texto
Lenguaje C++ es el Mejor!!!!!! \n3%·4&76/ Hasta aquí llega la cadena almacenada Programación – Prof. Gonzalo Müller – Clase 21 – GM - 87
Cadena de Caracteres Ejemplo: Utilizando el carácter ‘\n’, el código para escribir en pantalla sería: unsigned char k; k = 0; while (texto[k] != ‘\n’) { printf(“%c”, texto[k]); k = k + 1; }
Ventaja: No tiene limite en el tamaño máximo de la cadena. Desventajas: Se desconoce el tamaño de la cadena de antemano. La cadena no puede contener ‘\n’ Programación – Prof. Gonzalo Müller – Clase 21 – GM - 88
Cadena de Caracteres 5. Se utiliza un carácter no imprimible para indicar el final de la cadena de caracteres. El carácter no imprimible utilizado es primer carácter de la tabla ASCII: 0 ó 00h. texto Cadena de Tamaño N 00h No utilizado 0 N-1 N N+1 No confundir código ASCII 0, también conocido como NULL, con la constante carácter `0´ (a esta le corresponde el código ASCII 48). Programación – Prof. Gonzalo Müller – Clase 21 – GM - 89
40
Cadena de Caracteres Para la 1º Cadena se tiene: texto Lenguaje C++ es el Nº1\0,wem8¬A43%·4&76/ Hasta aquí llega la cadena almacenada
Para la 2º Cadena se tiene: texto
Lenguaje C++ es el Mejor\0em8¬A43%·4&76/ Hasta aquí llega la cadena almacenada
Para la 3º Cadena se tiene: texto
Lenguaje C++ es el Mejor!!!!!! \03%·4&76/ Hasta aquí llega la cadena almacenada Programación – Prof. Gonzalo Müller – Clase 21 – GM - 90
Cadena de Caracteres Ejemplo: Se podría leer una cadena a través del siguiente código: 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
Programación – Prof. Gonzalo Müller – Clase 21 – GM - 91
Cadena de Caracteres Ejemplo: Utilizando el carácter NULL, el código para escribir en pantalla sería: unsigned char k; k = 0; while (texto[k] != 0) { printf(“%c”, texto[k]); k = k + 1; }
Ventaja: No tiene limite en el tamaño máximo de la cadena. Desventaja: Se desconoce el tamaño de la cadena de antemano. Programación – Prof. Gonzalo Müller – Clase 21 – GM - 92