









Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
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
1 / 17
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!










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,
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
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
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.
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
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
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:
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.
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
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