Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CARÁCTER
INTEGRANTES:
DANIEL FERNANDO SALAZAR PÉREZ
JUAN FELIPE GUARÍN GALVIS
OSCAR FABIAN NUCHE SIACHOQUE
AREA:
ALGORITMOS Y PROGRAMACIÓN
5.1
INTRODUCCIÓN
El lenguaje de programación C no provee un tipo de datos que permita definir cadenas o
string. Las cadenas se implementan sobre arrays de caracteres, pero, como arrays es un
tema que analizaremos más adelante, intentamos restarle importancia haciendo hincapié
en el hecho de que un array es un “conjunto” de variables del mismo tipo de datos por lo
que un array de caracteres representa a un conjunto de variables de tipo char.
Fig. 5.1
5.2.1 ARITMÉTICA DE
DIRECCIONES
Como el identificador de una cadena es equivalente a la dirección de memoria del primero de sus
caracteres y las direcciones de los caracteres subsiguientes son consecutivas entonces la dirección el i-
ésimo carácter se puede calcular sumando el valor entero i a dicho identificador.
char a[] = "Esto es una cadena"; a representa a la dirección de memoria del primer carácter de la
cadena, a+1 hace referencia a la dirección del segundo carácter y a+i hace referencia a la dirección de
memoria del carácter ubicado en la posición i.
5.2.1 ARITMÉTICA DE
DIRECCIONES
En el siguiente programa, definimos la cadena a e imprimimos algunas de las subcadenas que obtenemos luego de
sumarle valores enteros a su identificador.
5.2.2 PREFIJOS Y
SUFIJOS
Decimos que la cadena p es prefijo de la cadena x si los primeros caracteres de x coinciden con
todos los caracteres de p. Análogamente, diremos que la cadena s es sufijo de la cadena x si
los últimos caracteres de x coinciden con la totalidad de los caracteres de s.
Según lo expuesto más arriba, p es un prefijo de x y s es un sufijo. Otros prefijos de x podrían ser:
“Esto”, “E”, “Esto es una”.
Otros sufijos de x serían: “cadena”, “a”, “na”, etcétera.
5.2.2.1 DETERMINAR SI UNA CADENA
ES PREFIJO DE OTRA (función
esPrefijo)
Desarrollaremos una función para determinar si una cadena es prefijo de otra.
La función esPrefijo recibirá dos cadenas x y p, y retornará true o false según p sea o no prefijo de
x.
Análisis: Si la cadena p es prefijo de la cadena x entonces x debe comenzar con una secuencia de
caracteres idéntica a p y su longitud debe ser mayor o igual que la longitud de p. Veamos
5.2.2.1 DETERMINAR SI UNA CADENA
ES PREFIJO DE OTRA (función
esPrefijo)
Para programarla utilizaremos la función de biblioteca strncmp que es análoga a la función
strcmp, pero recibe un parámetro extra que indica cuántos caracteres queremos comparar
char [ ] obtenerSaludo ( ) ;
Definiremos la función ltrim cuyo objetivo será retornar una cadena idéntica a
la que reciba como parámetro, pero sin espacios en blanco a la izquierda. Por
ejemplo:
Está función es análoga a la anterior solo que se debe retomar una cadena sin espacios en blanco a la
derecha.
La estrategia será recorrer la cadena comenzando desde atrás hacia adelante y mientras que
encontremos espacios. Luego retornaremos la subcadena comprendida entre las posiciones 0 e i+1
de la cadena original.
5.3.2.2 Eliminar los espacios ubicados a la derecha (función
rtrim)
5.3.2.3 Eliminar los espacios en ambos extremos de la
cadena (función trim)
Como ya desarrollamos las funciones
ltrim y rtrim para eliminar
respectivamente los espacios ubicados a
izquierda y a derecha de una cadena
podemos pensar ahora en desarrollar la
función trim para que retorne una cadena
idéntica a la que reciba como parámetro,
pero sin espacios en blanco en sus
extremos.
Esta función se programa fácilmente
retornando el ltrim(rtrim(s)) siendo s la
cadena que recibe como parámetro.
5.3.3 Función de biblioteca strtok
Pero si en lugar de tomar como separador al carácter ‘|’ consideramos como separador al
carácter ‘a’ sobre la misma cadena s el conjunto de tokens será: tokens = { “Ju”, “n|M”, “rcos|
C”, “rlos|M”, “ti”, “s” }; Utilizando la función strtok podemos separar una cadena en tokens
delimitados por un separador. En el siguiente ejemplo, veremos cómo hacerlo:
Aplicaremos las funciones de biblioteca strtok y atoi para desarrollar una nueva versión del problema del cambio, estudiado
en los capítulos anteriores, cuyo enunciado recordaremos a continuación.
Problema 5.2