UTN – FRRo Algoritmos y Estructuras de Datos Cadenas de caracteres – Tipo String TIPO STRING: En el Pascal estándar para el manejo de información que viene expresada por palabras, como por ejemplo apellido, nombre, calle, etc. se usan arreglos de caracteres También empleamos estos arreglos cuando debemos trabajar con datos numéricos, sobre los que no corresponde realizar operaciones como por ejemplo: número de teléfono, DNI. Es frecuente ver en los programas declaraciones como las siguientes: TYPE palabra= array[1..20] of char; ….. VAR nombre, calle, telefono : palabra; o utilizando la declaración implícita de tipo el equivalente: VAR nombre, calle, telefono : array[1..20] of char El uso de dicho tipo de datos para almacenar textos es tan usual que muchos lenguajes agregan un nuevo tipo de datos, para facilitar el tratamiento de estas cadenas de caracteres. Turbo Pascal ofrece el tipo de dato string, con una variedad de funciones y procedimientos específicos, que tornan muy cómodo su tratamiento Básicamente el string es un arreglo de caracteres. Al definirlo podemos establecer su longitud (número máximo de caracteres que va a poder contener desde 1 hasta 255 caracteres. Como se declara: Se declara con la palabra clave string seguida por un par de corchetes encerrando la máxima longitud prevista de la cadena. Por omisión, si este número no se declara, se entiende que es 255. TYPE cad20 = string [20]; cad25 = string [25]; cad = string; VAR apellido : cad20; nombre : cad25; titulo: cad; O, en forma equivalente: VAR apellido : string [20]; nombre : string [25]; titulo: string; En los programas en que se declara este tipo de variables de cadena se pueden realizar asignaciones, comparaciones, lecturas, salidas y otras operaciones en una forma muy directa, debido a que el Turbo Pascal permite a al tipo string ciertas funcinalidades similares a la de los tipos simples. Pag. 1 de 4 M. Iwanow- R.Kantor UTN – FRRo Algoritmos y Estructuras de Datos Cadenas de caracteres – Tipo String Longitud de una cadena: Se consideran dos longitudes: una lógica y una física. La longitud lógica es la cantidad de caracteres que efectivamente están guardados en el string. La longitud física en bytes es igual al número de caracteres con que fue creada más uno. La longitud física aumenta en uno pues se agrega un primer elemento para guardar en el la longitud lógica. Sea por ejemplo una declaración: VAR flor : string[15]; Y se realiza la asignación : flor := ‘roSa’ La longitud lógica de la variable será de 4 caracteres y la longitud física será de 16 bytes pues así fue definida. En memoria : 4 r o flor S a Existe un caso especial de una cadena, que es cuando no tiene ningún carácter en ella, en ese momento decimos que es una cadena vacía o nula. Es recomendable inicializar los valores de las cadenas a cadenas vacías o nulas al inicio del programa, para evitar datos extraños e indeseables. A las variables de cadena se pueden dar valores con una sentencia de asignación o con una sentencia de lectura (read). En ambos casos se evalúa la cadena fuente y se almacena en la variable de la cadena destino. Dependiendo del tamaño lógico de las cadenas fuente y destino se pueden presentar tres casos diferentes 1)Si Las longitudes lógicas de las cadenas destino y fuente son iguales cada posición de destino se rellena con el respectivo carácter de la cadena fuente. 2)Si la longitud física de la cadena destino es mayor que la longitud lógica de la cadena fuente, después de la copia la cadena destino seguirá teniendo la misma longitud física, pero ya que sólo se almacenan los caracteres de la cadena fuente, en la primeras posiciones del arreglo, su longitud lógica será igual a la de la cadena fuente. 3)Si la longitud física de la cadena destino es menor que la de la cadena fuente, se almacenarán los primeros n caracteres (de izquierda a derecha) de la cadena fuente, donde n es la longitud con que fue declarada la cadena destino. Operaciones con Cadenas: El Turbo Pascal ofrece algunas herramientas que facilitan el manejo del tipo de datos string. Pag. 2 de 4 M. Iwanow- R.Kantor UTN – FRRo Algoritmos y Estructuras de Datos Cadenas de caracteres – Tipo String Manejo de los elementos de la cadena Es posible leer cada elemento de una cadena por separado, ya que en esencia se trata de un arreglo de caracteres. Si en la variable nombre almacenamos la cadena 'Pedro' es posible asignar a otra cadena el valor de nombre[x] donde x es la posición de la cadena que se quiere leer. Por ejemplo la instrucción : writeln(nombre[3]) mostrará el carácter ´d´ Longitud de una cadena: Para conocer la longitud de una cadena utilizamos la función length, la longitud es la cantidad de caracteres que contiene la cadena en un momento determinado.(lógica) Su sintaxis es: length (cadena) y la función regresa un valor entero. Comparación de cadenas La comparación de cadenas es una operación muy común en Turbo Pascal; estas comparaciones se realizan con base en el orden del código ASCII, por ejemplo la cadena 'Rosa' es menor a la cadena 'rosa' ya que el valor del código ASCII de R es menor que el de r. Unión de cadenas En ocasiones es necesario combinar dos o más cadenas de caracteres en una sola, para lograr ésto utilizamos los siguientes métodos. Operador + Es una de las formas más sencillas de unir dos cadenas y se maneja exactamente como una suma, la única limitante es que en caso de ser mayor la longitud resultante de la suma que la longitud que pueda manejar la variable en que se almacenará se truncarán los caracteres sobrantes. Ejemplo: cad1 := 'Buenos '; cad2 := 'dias '; cad3 := cad1 + c ad2; ….. writeln (cad3); Mostrará : 'Buenosdias '. (Notesé que este ejemplo es solo una sección del programa, para ejecutarlo es necesario completar la estructura). Función concat La función concat produce los mismos resultados que la concatenación, es posible incluir cualquier número de cadenas que se necesiten concatenar. La suma de las cadenas no deberá sobrepasar la longitud que la variable, a la cual se asignará dicha suma, puede manejar. Ejemplo: cadena := concat (cad1, cad2, cad3); Función copy La función copy regresa una subcadena de una cadena dada como parámetro. Su sintaxis es: copy (cadena, ini, canti); Donde cadena es de tipo string, ini es la posición desde la cual se obtendrá la subcadena y canti es el número de caracteres que se extraerán. Ejemplo: palabra := "Rosario"; writeln (copy(palabra, 3, 4)); Pag. 3 de 4 Mostrará: ‘sari ‘ M. Iwanow- R.Kantor UTN – FRRo Algoritmos y Estructuras de Datos Cadenas de caracteres – Tipo String Pos La función Pos nos sirve para localizar una determinada cadena dentro de otra, en otras palabras para verificar si una cadena es subcadena de otra segunda. Los parámetros que requiere son: la cadena que se buscará y la cadena donde se buscará la primera: pos (cadena1, cadena2); Cuando encuentra la cadena la función devuelve su posición inicial, en caso de que no la encuentre devuelve el valor de 0. Ejemplo: cadena := 'Domingo Lunes Martes Miercoles Jueves Viernes Sabado'; writeln(pos('Lunes', cadena)); {Muestra 9} writeln(pos('Jueves', cadena)); {Muestra 32} writeln(pos('Ayer', cadena)); {Muestra 0} Insert El procedimiento Insert sirve para insertar una cadena dentro de otra en alguna posición determinada. Sintaxis: cadena1, cadena2, posición Insert () Donde cadena1 es la que se insertará, cadena2 es donde se insertará y posición es el lugar donde se insertará. El parámetro posición debe ser de tipo entero. Delete Este procedimiento elimina un determinado número de caracteres de una cadena. Su sintaxis es: delete (cadena, inicio, número) cadena es la variable en la cual se eliminarán los caracteres, inicio es la posición del primer carácter a eliminar y número es la cantidad de caracteres que se borrarán. Str, Val Sucede con cadenas que se quiera convertir una que contiene un número a su valor numérico, para poder utilizarlo en operaciones matemáticas, así como convertir un número a su equivalente en una cadena. ( no es lo mismo el valor 25 y el valor '25', en el primer caso es un número mientras que en el segundo es un par de caracteres ASCII.) El procedimiento str obtiene una cadena a partir de un valor numérico. Su sintaxis es: str(valor, cadena) Donde valor es el número a convertir y cadena es la variable donde se almacenará la cadena ya convertida. val es un procedimiento que convierte una cadena en un valor de tipo numérico. Si la cadena no esta formada exclusivamente de números siguiendo las reglas para el tipo de datos que se desea obtener se generará un error. Sintaxis: val (cad, num, código) Donde cad contiene la cadena que será procesada, num es la variable de tipo numérico donde se guardará el valor de la cadena y código es una variable de tipo entero que contendrá el valor de 0 si no hubo errores y un valor diferente en caso de que no se haya podido convertir la cadena, el valor de Código representa la posición de la cadena donde ocurrió el error. Se recomienda probar todas estas funciones y procedimientos en la máquina. Pag. 4 de 4 M. Iwanow- R.Kantor