Práctica 11 cadenas de caracteres

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