Clase Programacion 21

July 26, 2017 | Author: gmullerb | Category: String (Computer Science), C++, Quotation Mark, Ascii, Computer Programming
Share Embed Donate


Short Description

Descripción: Clase 21 de Programación, Prof. Gonzalo Müller [email protected], Facultad de Ingeniería, UCV...

Description

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

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF