Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Fundamentos de Programación: Manipulación de cadenas de caracteres en C, Esquemas y mapas conceptuales de Lenguajes de Programación

Este documento proporciona una introducción a la manipulación de cadenas de caracteres en el lenguaje de programación c. Se explica cómo inicializar y manipular cadenas de caracteres utilizando arreglos y punteros, así como cómo leer y escribir cadenas desde el teclado. Además, se muestran ejemplos prácticos para ilustrar los conceptos presentados.

Tipo: Esquemas y mapas conceptuales

2023/2024

Subido el 16/02/2024

kbyte-solutions
kbyte-solutions 🇪🇨

3 documentos

1 / 17

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Fundamentos de Programación | Ing. Patricio Vinueza
Fundamentos de Programación
Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CADENA DE CARACTERES
Una cadena de caracteres es un array unidimensional, en el que todos sus elementos
son de tipo char.
Igual que sucedía con los arrays numéricos, un array de caracteres puede ser inicializado
en el momento de su definición. Por ejemplo,
int vector[5] = {10, 20, 30, 40, 50};
0
1
2
3
4
10
20
40
char cadena[] = "abcd";
0
1
2
3
4
a
b
c
d
\0
La secuencia de escape ‘\0’ se coloca automáticamente
Cuando se inicializa una cadena
Cuando lee desde el teclado
scanf leen cadenas hasta que encuentra un espacio en blanco
cin o un tabulador o un ENTER
gets() lee cadenas hasta que encuentra el ENTER
Cuando uno quiere visualizar o imprimir
printf
cout
puts
vector
cadena
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff

Vista previa parcial del texto

¡Descarga Fundamentos de Programación: Manipulación de cadenas de caracteres en C y más Esquemas y mapas conceptuales en PDF de Lenguajes de Programación solo en Docsity!

Fundamentos de Programación

Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx – xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

CADENA DE CARACTERES

Una cadena de caracteres es un array unidimensional, en el que todos sus elementos son de tipo char. Igual que sucedía con los arrays numéricos, un array de caracteres puede ser inicializado en el momento de su definición. Por ejemplo,

int vector[ 5 ] = {10, 20, 30, 40, 50};

char cadena[] = "abcd";

a b c d \ 0

La secuencia de escape ‘\0’ se coloca automáticamente Cuando se inicializa una cadena Cuando lee desde el teclado scanf leen cadenas hasta que encuentra un espacio en blanco cin o un tabulador o un ENTER gets() lee cadenas hasta que encuentra el ENTER Cuando uno quiere visualizar o imprimir printf cout puts

vector

cadena

Se puede colocarlo manualmente char cadena[] = "abcd"; printf("%s\n", cadena); Este ejemplo define el array de caracteres cadena con cinco elementos ( cadena[0] a cadena[4] ) y asigna al primer elemento el carácter 'a', al segundo el carácter 'b', al tercero el carácter 'c', al cuarto el carácter 'd' y al quinto el carácter nulo (valor ASCII 0 o secuencia de escape \0), con el que C finaliza todas las cadenas de caracteres. 0 1 2 3 4

a b c d \ 0

Observe que el carácter nulo de terminación lo añade C automáticamente, por lo tanto no es necesario especificarlo en la inicialización. La llamada a printf con la especificación de formato %s permite visualizar la cadena. Se visualizan todos los caracteres que hay desde el primero hasta el carácter nulo. Esto es, una función capaz de manipular una cadena sabe dónde empieza por el nombre del array y sabe que termina en el primer carácter nulo que encuentre según avance sobre la misma, byte a byte. Puesto que cada carácter es un entero entre 0 y 255, las dos líneas anteriores son equivalentes a las siguientes: xxxxxx Cadenas Constantes Simbólicas Una "cadena constante simbólica" es una cadena constante a la que se le ha dado un nombre. Se puede definir una "cadena constante simbólica" con el preprocesador #define o con el modificador const. Por ejemplo, las siguientes sentencias: #define MU "dijo Juan" printf (""¡Vuela, vuela, pajarito!" %s.\n", MU); Imprimirán: "¡Vuela, vuela, pajarito!" dijo Juan.

cadena

char m2[20] = "limítese"; La única precaución debe ser que el número de elementos declarados sea, como mínimo, uno más que la longitud de la cadena, para almacenar el carácter nulo. Es decir, si se asigna el tamaño a un arreglo se debe elegir un tamaño lo suficientemente grande para almacenar la información de la cadena. Cualquier elemento no utilizado será inicializado al carácter nulo, '\0'. Por ejemplo, la declaración gráficamente de la cadena mascotas, se muestra en la Figura siguiente. char mascota[12] = "lindo pez"; 0 1 2 3 4 5 6 7 8 9 10 11

l i n d o p e z \ 0 \ 0 \ 0

Además, para obtener una cadena nula es suficiente con almacenar el carácter nulo en el primer caracter de la cadena. Por ejemplo, en la siguiente asignación se obtiene nula la cadena mascota: mascota[0] = '\0'; // mascota = '\0'; Punteros de Tipo char como Cadenas Se puede utilizar notación de punteros para obtener una cadena: inicializando una variable tipo puntero con la dirección de una cadena constante, o mediante la asignación dinámica para la creación de la memoria donde se va almacenar la cadena. Por ejemplo, la inicialización de una cadena se haría: char m3 = "\nBasta por hoy"; / m3 apunta a la cadena constante/ que es lo mismo a: char m4[] = "\nBasta por hoy"; La declaración char *m3 = "\nBasta por hoy"; solo se utiliza cuando se inicializa una cadena, porque la memoria se reserva de acuerdo a la cadena constante a ser inicializada. Otra forma sería reservando memoria mediante asignación dinámica, así: char m5; m5 = malloc (15 * sizeof (chat)); strcpy (m5, "\nBasta por hoy"); / strcpy(), función estándar para copiar cadenas. */ mascota

sizeof() esto es una función, el lenguaje C le a interpretado como un operador () + - / > ?: sizeof() ++ -- sizeof(int) devuelve el 2 sizeof(char) devuelve 1 sizeof(float) devuelve 4 int num[10]; int pnum; pnum = malloc(10sizeof(int)); //creando un arreglo dinamicamente 0 1 2 3 4 5 6 7 8 9

pnum

Como cad_punt es un arreglo de cinco punteros a cadenas de caracteres; cada puntero apunta a la dirección de su cadena constante correspondiente, la misma que está almacenada en la "tabla de cadenas constantes", como se muestra gráficamente en la siguiente figura. En donde el primer puntero es cad_punt[0], y apunta a la primera cadena "Números"; el segundo es cad_punt[1], y apunta a la segunda cadena "Múltiplo", y así sucesivamente. En concreto, cada puntero apunta al primer caracter de su cadena correspondiente. b) La asignación dinámica de memoria. Se debe utilizar cualquier función de asignación dinámica, para obtener el espacio de memoria con el objeto de almacenar las cadenas. Ejemplo Realizar un programa para leer cadenas de caracteres desde el teclado, y almacenarlas en las direcciones de memoria apuntadas por los punteros de un "arreglo de punteros", para esto se debe reservar memoria con la función malloc(), en cada cadena de acuerdo a su tamaño. El tamaño (número de caracteres) de las cadenas se determina con la función strlen(). Por último, las cadenas ingresadas en el "arreglo de punteros" deben imprimirse. #include "stdio.h" #include "stdlib.h" #include "string.h" void main () { int i; char aux[80];

char cad_punt[5]; for (i = 0; i < 5; i++) { puts ("Ingrese una cadena:"); gets (aux); if ((cad_punt [i] = malloc (strlen (aux) + 1)) == NULL) { printf ("Error, no hay suficiente memoria.\n"); exit (1); } strcpy (cad_punt[i], aux); / La función strcpy() copia una cadena en otra. */ } puts ("\nCadenas ingresadas:"); for (i = 0; i < 5; i++) puts (cad_punt[i]); } La salida de este programa podría ser: Ingrese una cadena: Lenguaje C Ingrese una cadena: Programación Ingrese una cadena: Objetos Ingrese una cadena: C++ Ingrese una cadena: Windows Cadenas ingresadas: Lenguaje C Programación Objetos C++ Windows Por último, un arreglo de punteros como el del anterior ejercicio: char *cad_punt[5]; declara un arreglo "no uniforme" o "no rectangular", en el que cada porción de memoria (cada cadena) está determinado por la cadena inicializada o la cantidad de memoria asignada dinámicamente, sin que se desperdicie

Ejercicio Ejemplo Escribir un programa para procesar las notas de un curso, en el cual se debe indicar el número de materias que toma cada estudiante para determinar el arreglo donde se almacenarán las notas. Además, se debe utilizar un arreglo para almacenar los nombres de los estudiantes. La información de cada estudiante es el nombre y las notas (sobre 20), que debe ser ingresada hasta que digiten la palabra FIN en el nombre del estudiante. Imprimir una tabla alfabéticamente como en el siguiente ejemplo de 3 alumnos y 2 notas:

MATERIA

MATERIA

2 PROMEDIO

ORD NOMBRE NOTA NOTA ALUMNO OBSERVACION

1 Carlos Perez 16 15 15,5 ---

2 Luis Rosales 12 12 12 MAL

3 Juan Salazar 16 12 14 ---

PROMEDIO DEL CURSO: 13,

La columna de la OBSERVACION consiste en imprimir el mensaje "MAL", cuando el promedio de las notas del estudiante es menor al promedio general del curso, caso contrario imprimir una línea entrecortada.

Procesar las notas de un curso

Menú

1. Ingresa datos de cada alumno

2. Imprimir Reporte

3. Salir

Seleccione una opción: 1

Ha seleccionado la opción 1

Ingrese el nombre del 1º. estudiante: Carlos Perez

Ingrese la nota de materia 1: 16

Ingrese la nota de materia 2: 15

Ingrese el nombre del 2º. Estudiante: Luis Rosales

Ingrese la nota de materia 1: 12

Ingrese la nota de materia 2: 12

Ingrese el nombre del 3º. Estudiante: Juan Salazar

Ingrese la nota de materia 1: 16

Ingrese la nota de materia 2: 12

Ingrese el nombre del 4º. Estudiante: FIN

Usted a finalizado el ingreso

Presione una tecla para continuar…

Lectura de números a cadenas de caracteres Leo de cadenas a numeros Basura en la memoria interna del teclado Buffer del teclado Stdin char nombres[6][30]; nombres

0 C a r l o s P e \ 0

1 L S i s R o s a l \ 0

2 J u a n S a l \ 0

4 C a r l o s P e \ 0

float notas [6][2];

notas

0 \ 0

1 \ 0

2 \ 0

3 \ 0

4 \ 0

5 \ 0

6 \ 0

cout<<"\tNombre: "; gets(aux_nom); fflush(stdin); if (strcmp(aux_nom,"FIN")==0) { n_alum=fila; break; } else { strcpy(nombres[fila],aux_nom); for(columna=0;columna<TAM_M;columna++) { cout<<"\tNota Materia "<<columna+1<<": "; do{ cin>>notas[fila][columna]; if (!(notas[fila][columna]>=0 && notas[fila][columna]<=20)) cout<<"El valor no es correcto...solo acepta de 0 a 20\n\n"; }while (!(notas[fila][columna]>= && notas[fila][columna]<=20)); } fflush(stdin); } } cout<<"\n\nHa ingresado "<<n_alum<<" alumnos\n\n"; system("pause"); break; case 2: //imprimir reporte //calcular el promedio individual for (fila=0;fila<n_alum;fila++) { for(columna=0,suma=0;columna<TAM_M;columna++) suma+=notas[fila][columna]; promedio[fila]=suma/TAM_M; } //calcular el promedio general for (fila=0,suma=0;fila<n_alum;fila++) suma+=promedio[fila]; prom_gen=suma/n_alum; //imprimir el reporte system("cls"); cout<<"ORD NOMBRE NOTA1 NOTA2 PROM OBSERVACION\n"; cout<<"---------------------------------------------------- \n"; for(fila=0;fila<n_alum;fila++) { cout<<fila+1<<" ";

cout<<nombres[fila]<<" "; for(columna=0;columna<TAM_M;columna++) cout<<notas[fila][columna]<<" "; cout<<promedio[fila]<<" "; promedio[fila]<prom_gen?cout<<" MAL\n":cout<<" ---\n"; } cout<<"\n\n"; cout<<"\tPROMEDIPO GENERAL: "<<prom_gen<<"\n\n"; system("pause"); break; }//fin del switch }while(opcion != 3); }//fin programa

CONCEPTOS

Traza de una matriz Definición : TRAZA DE UNA MATRIZ Sea una matriz

cuadrada A de orden n, se define la traza de la matriz A y se denota por tr(A) al valor

obtenido al sumar todos los elementos de la diagonal principal.

Es sencillo obtener la traza(A), ya que basta sumar 1+1+0=

Problemas 4

Elaborar un programa que lea una línea de entrada en una cadena de caracteres

y cuente cuántos caracteres son dígitos, letras mayúsculas y letras minúsculas;

luego imprimir los resultados.NO NO PUEDE USAR REORIA DE PUNTEROS.

Problemas 5

Realizar un programa que lea las letras del alfabeto inglés en una cadena de

caracteres, hasta que encuentre un caracter diferente, luego convertir todas las

letras a mayúsculas e imprimir la cadena indicando cuantos caracteres se

leyeron. La función toupper(ch) convierte el caracter ch a mayúscula. NO NO

PUEDE USAR TEORIA DE PUNTEROS.

Problemas 6

Realizar un programa que ingrese desde teclado un texto que se almacene en

una cadena de caracteres para obtener su cadena inversa (hacia atrás). Luego

imprimir las dos cadenas. NO NO PUEDE USAR TEORIA DE PUNTEROS.

Problemas 7

Realizar un programa para crear un menú con la sentencia switch, que tenga las

siguientes opciones: (NO NO PUEDE USAR TEORIA DE PUNTEROS).

Menú:

0. Salir.

1. Cuenta caracteres blancos.

2. Cuenta letras.

3. Cuenta dígitos.

El menú debe aparecer cada vez que se desea una opción.

Las opciones del menú realizan lo siguiente:

0. Terminar el programa y vuelve al sistema operativo.

1. Cuenta el número de espacios en blanco que tiene una cadena de texto

ingresada desde teclado.

2. Cuenta el número de letras del alfabeto inglés (mayúsculas y minúsculas) que

tiene una cadena de texto ingresada desde teclado.

3. Cuenta el número de dígitos que tiene una cadena de texto ingresada desde

teclado.

Problemas 8

Escribir un programa que una lista de provincias del Ecuador y sus

correspondientes capitales. Colocar el nombre de cada provincia en una matriz

y su capital correspondiente en otra matriz.

El programa debe tener el siguiente menú, que permita ejecutar una de las

siguientes operaciones:

a) Consulta:

1. Determinar la capital de la provincial especificado.

2. Determinar la provincia cuya capital es especificada.

b) Añadir una nueva provincia con su capital.

c) Borrar una provincial con su correspondiente capital.

d) Generar un listado de todos las provincias y sus capitales.

e) Salir del Programa.

Problemas 9

Realizar un programa que introduzca una cadena de caracteres, para modificarla

letra a letra restando 30 del valor numérico que se utiliza para representar cada

letra en código ASCII. Escribir la cadena en forma codificada, luego decodificar

la cadena y escribirla.