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).



No hay comentarios:

Publicar un comentario