Fecha de efectividad: ______________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD Formato para prácticas de laboratorio PROGRAMA EDUCATIVO PLAN DE ESTUDIO CLAVE DE UNIDAD DE APRENDIZAJE NOMBRE DE LA UNIDAD DE APRENDIZAJE TRONCO COMÚN 2009-2 11214 PROGRAMACIÓN PRÁCTICA No. LABORATORIO DE CIENCIAS BÁSICAS (PROGRAMACIÓN) DURACIÓN (HORAS) 11 NOMBRE DE LA PRÁCTICA CADENAS DE CARACTERES 2 1. INTRODUCCIÓN Una cadena de caracteres en C es una secuencia de cero o más caracteres seguidas por un caracter NULL o \0. Esta secuencia o serie de caracteres es tratada como una sola unidad. Las cadenas de caracteres pueden contener letras, dígitos y varios caracteres especiales como +, - , *, /, $, y otros, y siempre terminará con el caracter nulo ('\0'), que indica el fin de la cadena. Es importante asegurar el caracter de terminación NULL, ya que con éste es cómo C define y maneja las longitudes de las cadenas. Todas las funciones de la biblioteca estándar de C lo requieren para una operación satisfactoria. 2. OBJETIVO (COMPETENCIA) Desarrollar aplicaciones informáticas para la manipulación de cadenas de caracteres aplicando en el desarrollo funciones estándar de la biblioteca de C, que facilitan el procesamiento de cadenas y caracteres. Formuló Revisó Autorizó M.C. Pablo Martín Navarro Álvarez Dra. Wendolyn Elizabeth Aguilar Salinas M.C. Jorge Eduardo Ibarra Esquer M.C. Araceli Celina Justo López Dr. Daniel Hernández Balbuena Nombre y firma del maestro Nombre y Firma del Nombre y Firma del Responsable del Programa Director/Representante de Dirección Educativo la Código: GC-N4-017 Revisión: 4 Página 1 de 9 Fecha de efectividad: ______________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD Formato para prácticas de laboratorio 3. FUNDAMENTO Las cadenas de caracteres (también llamadas cadenas o strings) son un tipo particular de arreglos. Son de hecho arreglos de tipo char, con la particularidad que tienen una marca de fin de cadena llamada caracter nulo o (el caracter '\0'). Es importante comprender la diferencia entre arreglos de caracteres y una cadena de caracteres. Las cadenas como se dijo anteriormente, contienen un carácter nulo al final del arreglo de caracteres. Las cadenas se deben almacenar en arrays de caracteres, pero no todos los arrays de caracteres contienen cadenas. Ejemplo de almacenamiento de un array de caracteres: Ejemplo de almacenamiento de una cadena de caracteres: Es importante notar que una cadena puede manejarse como una unidad o bien como un conjunto de caracteres, los cuales pueden ser direccionados por la posición que ocupan dentro de la cadena o arreglo. Por ejemplo una cadena se podría imprimir de las siguientes maneras: char palabra[20]="UNIVERSIDAD"; printf("El contenido de la cadena es %s\n", palabra); printf("El contenido de la cadena es\n"); for (c=0;c<11;c++) printf("%c", palabra[c]); La declaración de una cadena de caracteres se realiza de forma similar a la de un vector de cualquier otro tipo utilizando la siguiente sintaxis: char nombreCadena[dimension]; Código: GC-N4-017 Revisión: 4 Página 2 de 9 Fecha de efectividad: ______________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD Dónde: nombreCadena: Es el nombre de la variable de tipo cadena de caracteres. dimensión: Es el valor que indica el número de bytes que se deben reservar para la cadena, utilizando un byte para cada uno de los caracteres a almacenar. Formato para prácticas de laboratorio Ejemplos de declaración: char cadena_hola[]="Hola"; char otro_hola[]={'H','o','l','a','\0'}; //Equivale a la declaración anterior. char vector[]={'H','o','l','a'}; /* Un arreglo de 4 elementos, con los elementos 'H','o','l' y 'a' */ char espacio_cadena[1024]="Una cadena en C"; char cadena_vacia[]=""; Cómo se muestra en los ejemplos anteriores, al declarar un arreglo se define la cantidad de elementos que puede contener y se debe tener en cuenta el espacio adicional necesario para el caracter nulo ‘\0’. En el ejemplo anterior, tanto cadena_hola y otro_hola tienen una longitud de 5 caracteres y cadena_vacia tiene una longitud de 1. Podemos también declarar la cadena sin necesidad de dimensionarla o establecer su longitud como se muestra en la declaración de cadena_hola, en este caso, el compilador se encarga de reservar 5 espacios (bytes) para la cadena. El lenguaje C, permite escribir las cadenas como texto dentro de comillas dobles como lo muestra el ejemplo espacio_cadena, cadena_hola y cadena_vacia. Lectura de una cadena de caracteres Para hacer la lectura de una cadena de caracteres se puede utilizar la función scanf o la función gets de la siguiente forma: scanf("%s", cadena); gets(cadena); La ventaja de utilizar el gets en lugar del scanf es la lectura de los espacios en blanco, cosa que no hace la instrucción scanf. Otra forma de leer una cadena de caracteres es hacerlo caracter por caracter como un arreglo unidimensional o vector, accediendo al arreglo posición por posición. Código: GC-N4-017 Revisión: 4 Página 3 de 9 Fecha de efectividad: ______________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD El siguiente ejemplo lee una cadena de caracteres utilizando la función gets y posteriormente es impresa accediendo a ella como un arreglo de caracteres. Formato para prácticas de laboratorio #include<conio.h> #include<stdio.h> void main(void) { char cadena[25]; int pos; //Lectura de la cadena de caracteres. printf("Teclea una cadena de máximo 25 caracteres\n"); gets(cadena); //Impresión de la cadena caracter por caracter for (pos=0; pos < strlen(cadena); pos++) printf("%c", cadena[pos]); getch(); } Impresión de una cadena de caracteres Para hacer la impresión de una cadena de caracteres se puede utilizar la función printf o la función puts de la siguiente forma: printf("%s", cadena); puts(cadena); La función puts, copia una cadena de caracteres a la salida estándar, normalmente stdout o video. Si la función se ejecutó de forma exitosa retorna un valor positivo, en caso contrario EOF. Luego de que la cadena de caracteres fue impresa, se agrega automáticamente un \n o avance de línea. Esta función es más rápida que la función printf, ya que escribe directamente en el buffer de video. Sólo es aplicable a variables del tipo cadena. El siguiente ejemplo declara dos cadenas de caracteres y posteriormente las imprime utilizando la función puts. Observe que la impresión se hace en dos renglones separados sin utilizar el cambio de línea ya que la función puts agrega automáticamente ´\n´. Código: GC-N4-017 Revisión: 4 Página 4 de 9 Fecha de efectividad: ______________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD Formato para prácticas de laboratorio #include <stdio.h> #include<conio.h> void main(void) { char p[] = "Uno" ; char s[5] = "Dos" ; puts(p) ; puts(s) ; } /* La salida que genera el programa es: Uno Dos */ La biblioteca string.h Debido a que en C, las cadenas de caracteres no son más que arrays de caracteres, el compilador les da un tratamiento especial. Las cadenas de caracteres se pueden manipular de la misma manera en que manipula cualquier otro tipo de array. Sin embargo, es preferible hacer uso de una biblioteca estándar especialmente escrita para la manipulación de cadenas de caracteres y viene incluida con todo compilador de C. Todas las funciones para manejo de cadenas tienen su prototipo en la biblioteca <string.h>. Los compiladores de C dan soporte a la biblioteca de funciones <string.h>, a la que accede por medio de la directiva #include <string.h>. Debido a la cantidad de funciones contenidas en esta biblioteca, no veremos en detalle todas las funciones y nos limitaremos a mostrar algunos ejemplos de ciertas funciones importantes. Función strlen(): Esta función retorna un entero con la cantidad de caracteres de la cadena o string recibido como parámetro, no se toma en cuenta el caracter nulo. Sintaxis: int strlen(const char *s); Ejemplo: char nombre[14]= “Pablo Navarro”; int longitud; longitud = strlen(nombre); printf(“Cantidad de Caracteres: %d”, longitud); Código: GC-N4-017 Revisión: 4 Página 5 de 9 Fecha de efectividad: ______________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD La salida de este programa muestra lo siguiente en pantalla: Cantidad de Caracteres: 13 Formato para prácticas de laboratorio Función strcpy(): Esta función copia los caracteres del string "origen”, incluyendo el caracter NULL, a la dirección apuntada por "destino”. No verifica que haya suficiente memoria reservada para tal efecto, por lo que es responsabilidad del programador ubicar previamente suficiente memoria como para albergar a una copia de "origen". Sintaxis: char *strcpy(char *destino, const char *origen); Ejemplo: char nombre[15]=”Pablo Navarro”; char copia[15]; strcpy(copia, nombre); printf(“La cadena fuente contiene el valor: %s”, nombre); printf(“La cadena destino contiene el valor: %s”, copia); La salida de este programa muestra lo siguiente en pantalla: La cadena fuente contiene el valor: Pablo Navarro La cadena destino contiene el valor: Pablo Navarro Función strcat(): Esta función concatena dos cadenas, esto es, agrega la cadena fuente a la cadena destino, la función termina de agregar caracteres hasta haber encontrado en la cadena fuente el carácter de terminación NULL. Sintaxis: char *strcat(char *dest, const char *src); Ejemplo: char nombre[7]=”Pablo ”; char apellido[10]=”Navarro”; char nombreCompleto[20]=””; strcat(nombreCompleto, nombre); strcat(nombreCompleto, apellido); printf(“La cadena destino contiene el valor: %s”, nombreCompleto); La salida de este programa muestra lo siguiente en pantalla: La cadena destino contiene el valor: Pablo Navarro Código: GC-N4-017 Revisión: 4 Página 6 de 9 Fecha de efectividad: ______________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD Función strcmp(): Esta función compara dos cadenas de caracteres y retorna un entero cuyo valor depende del resultado de la comparación. El valor de retorno será: Formato para prácticas de laboratorio < 0 == 0 > 0 si cadena1 es menor que cadena2 si cadena1 es igual a cadena2 si cadena1 es mayor que cadena2 La comparación se realiza caracter a caracter, y devuelve el resultado de la comparación realizada entre los primeros dos que sean distintos. Esta comparación se efectúa tomando en cuenta el código ASCII de los caracteres así será por ejemplo '9' < 'A', 'A' < 'Z y 'Z' < ‘a’. Sintaxis: int strcmp(const char *cadena1, const char cadena2) Ejemplo: char cadena1[5]=”peso”; char cadena2[5]=”pelo”; if(strcmp(cadena1,cadena2) > 0) printf(“La palabra peso es mayor que pelo”); La salida de este programa muestra lo siguiente en pantalla: La palabra peso es mayor que pelo 4. PROCEDIMIENTO A. EQUIPO NECESARIO MATERIAL DE APOYO 1. Computadora con Visual C++ instalado 2. Unidad de almacenamiento Práctica 11 B. DESARROLLO DE LA PRÁCTICA El alumno realizará los ejercicios que el maestro le indique. 1. Escribe una función que elimine todos los espacios en blanco redundantes en una cadena. Esto es, espacios al inicio, al final y más de un espacio en blanco entre palabras. La función recibirá como parámetro la cadena original y regresará la cadena donde se hayan eliminado los espacios. Código: GC-N4-017 Revisión: 4 Página 7 de 9 Fecha de efectividad: ______________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD 2. Escribe una función que cambie todos los caracteres en una cadena a mayúsculas, minúsculas o formato de título. La función recibirá como parámetro la cadena original y un valor de tipo entero que le indicará si debe cambiar a minúsculas (si el valor es menor a 0), a mayúsculas (si el valor es mayor a 0) o utilizar el formato de título (si el valor es igual a 0). Por formato de título entendemos una cadena como “Esta Cadena Utiliza Formato De Título”. 3. Escribe una función que inserte una cadena dentro de otra en la posición que se le indique. Por ejemplo, si se tiene la cadena “La programación es interesante” y se quiere insertar la cadena “clase de” después de la palabra “La”, se le indicaría la posición 1, que significa que inserte la cadena después de la primer palabra. En ese ejemplo, el resultado sería “La clase de programación es interesante”. Se debe asegurar que al insertar la cadena, el espacio entre las palabras sea el correcto. La función recibirá como parámetros las dos cadenas y el indicador de posición. 4. Escribe una función que borre la primera aparición de una palabra dentro de una cadena. La función recibirá como parámetros la cadena con la frase a modificar y una cadena con la palabra que debe buscar. Regresará un valor entero con la posición donde se encontraba la palabra que fue borrada, o -1 en caso de no haberla encontrado. Tampoco deberá hacer distinción entre mayúsculas y minúsculas. Por ejemplo, si se tiene la cadena “El Jinete sin Cabeza perdió la cabeza la semana pasada” y se quiere borrar la palabra “cabeza”, el resultado será “El Jinete sin perdió la cabeza la semana pasada” y regresará el valor 4, que es la posición donde la palabra se encontró por primera vez. Se debe asegurar que al borrar la palabra, el espacio entre las palabras que queden sea el correcto. 5. Escribe un programa que ordene palabras dentro de una cadena en orden alfabético ascendente. Las palabras serán solicitadas al usuario dentro de un ciclo, y se irán insertando en la cadena en la posición que les corresponda. Esto se repetirá hasta que la palabra introducida sea “Salir” o que la longitud de la cadena con las palabras ordenadas llegue al máximo de 128 caracteres. Las palabras, incluyendo “Salir”, pueden ser escritas en cualquier combinación de mayúsculas y minúsculas. Al mostrar en pantalla la cadena resultante, las palabras deberán estar todas en minúsculas y con un solo espacio en blanco entre ellas. Puedes escribir las funciones que consideres necesarias, y hacer uso de las desarrolladas en los primeros puntos de esta práctica. 6. Escribe un programa que cambie todas las apariciones de una palabra dentro de una cadena por la palabra indicada. El programa no debe hacer distinción entre mayúsculas y minúsculas. La cadena deberá tener un máximo de 128 caracteres; en caso de que al intentar cambiar una palabra la longitud resultante sea mayor, deberá detener el proceso y dejar sin cambio el resto de las palabras. Puedes escribir las funciones que consideres necesarias, y hacer uso de las desarrolladas en los primeros puntos de esta práctica. C. CÁLCULO (SI APLICA) Y REPORTE El alumno deberá depurar sus programas para eliminar los errores de compilación, además deberá ejecutarlos utilizando diferentes valores con la finalidad de poder comprobar si los resultados que se obtienen son los esperados. Código: GC-N4-017 Revisión: 4 Página 8 de 9 Fecha de efectividad: ______________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD 5. RESULTADOS Y CONCLUSIONES El maestro revisará los programas proporcionando diferentes valores para determinar si el programa se ejecuta correctamente. 6. ANEXOS Ninguno. 7. REFERENCIAS [1] Tutorial de C http://www.cprogrammingexpert.com/C/introduction_to_c_programming_language.aspx [2] Arreglos y Cadenas http://www.fismat.umich.mx/mn1/manual/node6.html [3] Tutorial de C http://www.cprogramming.com/tutorial/c-tutorial.html Código: GC-N4-017 Revisión: 4 Página 9 de 9
© Copyright 2024