lunes, 20 de abril de 2009
MANEJOS DE CADENAS DE CARACTERES
MANEJOS DE CADENAS DE CARACTERES
Definición
Una cadena (string) de caracteres es un conjunto de caracteres (incluido el blanco), que se almacenan en un área contigua de la memoria. Pueden ser entradas o salidas a/desde una computadora.
La longitud de una cadena es el número de caracteres que contiene. La cadena que no contiene ningún carácter se le denomina cadena vacía o nula. y su longitud es cero; no se debe confundir con una cadena compuesta de solo espacios en blanco.
La representación de las cadenas suele ser con comillas simples o dobles, las comillas actúan como separadores, algunos ejemplos:
’12 de Octubre de 1492’
‘Hola, como estás?’
‘ ’
‘ANTIOQUIA ES GRANDE’
La cadena puede contener entre sus separadores, cualquier carácter válido del código aceptado por el lenguaje y la computadora; el blanco es uno de los caracteres más utilizado.
Una Subcadena es una cadena de caracteres que ha sido extraída de otra de mayor longitud.
’12 de’ es una subcadena de ’12 de Octubre de 1492’
‘como estás’ es una subcadena de ‘Hola, como estás?’
‘XI´ es una subcadena de ‘ANTIOQUIA ES GRANDE’
Ø Datos Tipo Carácter
Anteriormente se analizaron los diferentes tipos de datos y entre ellos existían el dato tipo carácter (char) que se incorpora en diferentes lenguajes de programación, bien con este nombre, o bien como datos tipo cadena.
Constantes
Una constante tipo carácter es un conjunto de caracteres válidos encerrados entre comillas, para evitar confundirlos con nombres de variables, operadores, enteros, etc
Variables
Una variable de cadena o tipo carácter es una variable cuyo valor es una cadena de caracteres. Las variables de tipo carácter se deben declarar en el algoritmo y según el lenguaje tendrán una notación u otra.
var NOMBRE, DIRECCION, PAIS: carácter
Ø Cadenas de Longitud Fija
Se consideran vectores de la longitud declarada, con blancos a izquierda o derecha si la cadena no tiene la longitud declarada. Así el ejemplo siguiente:
E
S
T
A
C
A
S
A
E
S
U
N
A
R
U
I
N
A
///
///
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Se declaró con una dimensión de 24 caracteres y los dos último se rellenan con blancos.
Ø Cadenas de Longitud Variable con un Máximo
Se considera un puntero, con dos campos que contienen la longitud máxima y la longitud actual.
20
17
E
S
T
A
C
A
S
A
E
S
G
U
A
Y
///
///
///
Donde:
20 = Longitud máxima
17 = Longitud actual
Ø Instrucciones Básicas con Cadenas
Las instrucciones básicas: asignar y entrada/salida (leer/escribir) se realizan de un modo similar al tratamiento de dichas instrucciones con datos numéricos.
Asignación
Si la variable NOMBRE ha sido declarada como carácter
var NOMBRE : carácter
La instrucción de asignación debe contener en el lado derecho de la asignación una constante tipo carácter (una cadena) o bien otra variable tipo carácter. Así:
NOMBRE ß ‘Juan González’
Significa que la variable NOMBRE toma por valor la cadena ‘Juan González’
Ø Entrada/Salida
La entrada/salida desde una computadora se puede realizar en modo carácter, para ello se asignará una cadena de caracteres a una variable tipo cadena.
var A,B,C,D: carácter
las instrucciones:
leer A,B
escribir C,D
Asignarán a A y B las cadenas introducidas por el teclado y visualizará o imprimirán en el dispositivo de salida las cadenas que representan las variables C y D.
FUNCIÓN DE CADENAS DE CARACTERES
El tratamiento de cadenas es un tema importante, debido esencialmente a la gran cantidad de información que se almacena en ellas. Según el tipo de lenguaje de programación elegido se tendrá mayor o menor facilidad para la realización de operaciones.
Las operaciones con cadenas más usuales son:
1. Cálculo de la longitud
2. Comparación
3. Concatenación
4. Extracción de subcadenas
5. Búsqueda de información
1.- CALCULO DE LA LONGITUD DE UNA CADENA
La longitud de una cadena, como ya se ha comentado, es el número de caracteres de la cadena. Así:
'Hola' Tiene 4 caracteres
La operación de determinación de la longitud de una cadena se representará por la función Longitud, cuyo formato es:
Longitud (cadena)
La función longitud tiene como argumento una cadena, pero su resultado es un valor numérico entero.
Ejemplo:
longitud('Como estás?') Proporciona 11.
longitud(' ') Cadena de un blanco, proporciona 1.
longitud(' Hola') Cadena 'Hola' relleanda de un blanco a la izquierda para tener longitud de 5.
2.- COMPARACION
Es una operación muy importante sobre todo en la clasificación de datos tipo carácter, que se utiliza con mucha frecuencia en aplicaciones de proceso de datos (clasificaciones de listas, tratamiento de textos, etc).
Los criterios de comparación se basan en el orden numérico del código o juego de caracteres que admite la computadora o el propio lenguaje de programación. En nuestro lenguaje algorítmico utilizaremos el código ASCII como código numérico de referencia.
En la comparación de cadenas se pueden considerar dos operaciones más elementales: igualdad y desigualdad.
Ejemplos:
'LUIS' < 'LUISITO' verdadera
'ANA' < 'MARTA' verdadera
'BARTOLO' >= 'BARTOLOME' falsa
3.- CONCATENACION
La concatenación es la operación de reunir varias cadenas de caracteres en una sola, pero conservando el orden de los caracteres en cada una de ellas. El símbolo que representa la concatenación varía de unos lenguajes a otros.
Los más utilizados son: + // & o
Las cadenas para concatenarse pueden ser constantes o variables.
Ejemplos:
'Mayo ' + 'de 1999' = 'Mayo de 1999'
x 'Lenguaje'
y'Ensamblador'
zx+' '+y z = 'Lenguaje Ensamblador'
4.- SUBCADENAS
Esta operación permite la extracción de una parte específica de una cadena: subcadena.
Subcadena (cadena, inicio, longitud)
Cadena: Es la cadena de la que debe extraerse una subcadena.
Inicio: Es un número o expresión numérica entera que corresponde a la posición inicial de la subcadena.
Longitud: Es la longitud de la subcadena.
Ejemplos:
subcadena ('abcdefgh',3,6) Equivale a 'cdef'
subcadena ('Tecnológico',1,3) Equivale a 'Tec'
subcadena ('Antioquia',5,2) Equivale a 'oq'
5.- BUSQUEDA
Esta operación localiza si una determinada cadena forma parte de otra cadena más grande o buscar la posición en que aparece un determinado carácter o secuencia de caracteres en un texto.
El resultado de la función es un valor entero
Posición (cadena, subcadena)
subcadena: Es el texto que se trata de localizar.
Ejemplo:
nombre'Marielena'
Posición (nombre,'elena') Produce 5.
La función Posición, al tomar también un valor numérico entero se puede utilizar en expresiones aritméticas o en instrucciones de asignación a variables numéricas.
Otras funciones de cadenas
a) Insertar Cadenas
Si se desea insertar una cadena C dentro de un texto o cadena más grande, se debe indicar la posición. El formato es:
Insertar (t, p, s)
t Texto o cadena donde se va a insertar.
p Posición a partir de la cual se va a insertar.
s Subcadena que se va a insertar.
Ejemplo:
Insertar ('Tecnológico',4,'XXX') = 'TecXXXnológico'
Insertar ('Juan O',5,'de la')= 'Juan de la O'
b) Borrar
Elimina una subcadena que comienza en la posición p y tiene una longitud l.
Borrar (t, p ,l)
t Texto o cadena de donde se va a eliminar una subcadena.
p Posición a partir del cual se va a insertar.
l Longitud de la subcadena a eliminar.
Ejemplo:
Borrar ('Tecnológico',4,2) = 'Teclógico'
c) Conversión Cadenas/Números
Existen funciones o procedimientos en los lenguajes de programación (val y str) que permiten convertir un número en una cadena y viceversa. En nuestros algoritmos los denotaremos por valor y cadena.
Valor (cadena) = Convierte la cadena en un número; siempre que la cadena fuese de dígitos numéricos.
Cadena (valor) = Convierte un valor numérico en una cadena.
Ejemplos:
Valor ('12345') = 12345
Cadena(12345)= '12345'
Funciones internas
Las operaciones que se requieren en los programas exigen en numerosas ocasiones, además de las operaciones aritméticas básicas, ya tratadas, un número determinado de operaciones especiales que se denominan funciones internas, incorporadas o estándar. Por ejemplo la función ln se puede utilizar para determinar logaritmo de un n se puede utilizar para determinar logaritmo de un número y la función sqrt calcula la raíz cuadrada de un número positivo. Existen otras funciones que se utilizan para determinar las funciones trigonométricas.
La siguiente tabla muestra las funciones internas más usuales, siendo x el argumento de la función.
Función
Descripción
Tipo_Argumento
Resultado
abs(x)
Valor absoluto de x
Entero o real
igual que argumento
arctan(x)
Arcotangente de x
Entero o real
real
cos(x)
Coseno de x
Entero o real
real
exp(x)
Exponencial de x
Entero o real
real
ln(x)
Logaritmo de x
Entero o real
real
log10(x)
Logaritmo decimal de x
Entero o real
real
round(x)
Redondeo de x
Real
entero
sin(x)
Seno de x
Entero o real
real
sqr(x)
Cuadrado de x
Entero o real
igual que argumento
sqrt(x)
Raíz cuadrada de x
Entero o real
real
trunc(x)
Truncamiento de x
real
entero
MANIPULACIÓN DE CADENAS
Ejercicio 1:
Contar el número de letras 'i' de una frase terminada en un punto. Se supone que las letras pueden leerse independientemente.
Algoritmo letras_i
var
N: entera
Letra: carácter
Inicio
N0
repetir
leer(Letra)
si Letra = 'i' entonces
NN+1
fin si
hasta que Letra = '.'
escribir('La frase tiene :', N,' letras i')
Fin
Ejercicio 2:
Aceptar un nombre y proporcionar la cantidad de caracteres que contiene.
Inicio
escribir('Cuál es el nombre : ')
Leer(nom)
escribir('Tu nombre tiene ', Longitud(nom),' letras')
Fin
Ejercicio 3:
Pedir una cadena que contenga una vez la letra F ('F'). Deberá informarse la posición donde fue encontrada, el carácter previo y el siguiente.
Inicio
escribir('Dame cadena que contenga [F] ')
leer(cad)
xPosición('F', cad)
escribir('La letra 'F' se encuentra en la posición : ',x)
escribir('El carácter anterior es : ' , Subcadena(cad, x-1,1))
escribir('El carácter siguiente es : ', Subcadena(cad, x+2))
Fin
Ejercicio 4:
Leer dos caracteres y deducir si están en orden alfabético.
variables:
CAR1, CAR2 : carácter.
Algoritmo Comparación
Inicio
Leer CAR1, CAR2
Si CAR1 <= CAR2 entonces
escribir('Si se encuentran en orden')
sino
escribir('Desordenados')
Fin_si
Fin
Ejercicio 5:
Se desea eliminar los blancos de una frase dada terminada en un punto. Se supone que es posible leer los caracteres de la frase de uno a uno.
Análisis del problema
Para poder efecturar la lectura de la frase almacena ésta en un arreglo de caracteres (F), de modo que F(1) contiene el primer carácter i-ésimo del a frase dada. Construiremos una frase nueva sin blancos en otro arreglo G.
Algoritmo
Los pasos a dar para la realización del algoritmo son:
Inicializar contador de letras de la nueva frase G.
Leer el primer carácter.
Repetir
Si el primer carácter no es en blanco, entonces escribir en el lugar siguiente del arreglo F leer carácter siguiente de la frase dada.
Hasta que el último carácter se encuentre.
Escribir la nueva frase (G), ya sin blancos.
Variables:
F : array de caracteres de la frase dada.
G : array de caracteres de la nueva frase dada.
i : Constador del array F.
j : Constador del array G.
Algoritmo Blanco
Inicio
i1
j0
leer F(i)
Repetir
Si F(i) <> ' ' entonces
jj+1
G(j) F(i)
Fin si
ii+1
leer F(i)
Hasta que F(i) = '.'
{escritura de la nueva frase G}
Desde i1 a j hacer
escribir G(i)
Fin Desde
Fin
Ejercicio 6:
Encontrar un espacio en blanco en una cadena.
variables:
x: entero
nom,a,b : cadena
Inicio
leer(nom)
xPosición (' ',nom)
a Subcadena (nom,1,x-1)
b Subcadena (nom, x+1, x)
Fin
Ejercicio 7:
Solicitar un nombre y mostrarlo con la inicial en mayúscula.
variables:
nom,a,b: cadena
x,y : carácter
z : entero
Inicio
escribir('Introduce nombre : ')
leer(nom)
x Subcadena(nom,1,1)
y MAYUSCULA(x)
z Longitud (nom)
a Subcadena (nom, 2, z-1)
Concatenación y+a
Escribir('Te llamas : ' , concatenación)
Fin
Nota: MAYUSCULA es una función para convertir letras minúsculas a mayúsculas.
EJERCICIOS PROPUESTOS
Escribir un algoritmo para determinar si una cadena especificada ocurre en una cadena dada, y si es así, suprimir un asterisco (*) en la primera posición de cada ocurrencia.
Escribir un algoritmo para contar el número de ocurrencias de cada una de las palabras “a”, “an” y “and” en las diferentes lineas de texto.
Contar el número de ocurrencias de una cadena especificada en diferentes líneas de texto.
Escribir un algoritmo que permita la entrada de un nombre, consitente en un nombre, un primer apellido y un segundo apellido. En ese orden, y que imprima a continuación el ultimo apellido, seguido del primer apellido y el nombre. Por ejemplo: Luis García García producirá: García García Luis.
Escribir un algoritmo que convierta los números arábigos en romanos y viceversa (I = 1, V = 5, X = 10, L = 50, C = 100, D = 500 y M = 1000).
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario