AnteriorPosterior

14. Cadenas de texto (strings)

Por: Nacho Cabanes
Actualizado: 19-01-2022 12:20
Tiempo de lectura estimado: 10 min.

 

Versión en video (12:43 min):

Pascal

14. Cadenas de texto (strings)

14.1. ¿Qué es una cadena de texto?

Un string es una secuencia de caracteres. Se usan para almacenar texto. En algunas versiones de Pascal existe un límite de 255 letras, y, en ese caso, cada string ocupa 256 bytes. En otras versiones esa limitación es mucho más suave, con tamaños por encima de 32.000 letras, como es el caso de GNU Pascal. En Pascal estándar, el formato era string[n] (o string(n) en algunos compiladores), donde n es la anchura máxima que queremos almacenar en esa cadena de caracteres (de 0 a 255), y en ese caso ocupará n+1 bytes en memoria.

Vamos a ver un primer ejemplo que pida al usuario su nombre y le salude:

(* SALUDO.PAS, Pedir nombre al usuario y saludarle  *)
(* Curso de Pascal, por Nacho Cabanes               *)

program Saludo;

var
    nombre: string[30];

begin
    writeLn('Introduce tu nombre, por favor');
    readLn(nombre);
    write('Hola ',nombre);
end.

(* Ejemplo de ejecucion:
Introduce tu nombre, por favor
Nacho
Hola Nacho
*)

Ejercicio propuesto 14.1: Crea un programa que te pida tres palabras y las muestre separadas por espacios y en el orden contrario a como las has introducido (primero la tercera palabra, después la segunda y finalmente la primera).

Podemos dar un valor a una cadena, o comparar el valor de una cadena con un texto prefijado, si indicamos el texto entre comillas simples, así:

(* STRING1.PAS, Dar valor prefijado a un string  *)
(* Curso de Pascal, por Nacho Cabanes            *)

program String1;

var
    saludo: string;

begin
    saludo := 'Hola, soy un texto';
    writeLn( saludo );
end.

(* Resultado:
Hola, soy un texto
*)

Ejercicio propuesto 14.2: Crea un programa que pida al usuario su nombre. Si es Nacho, le dirá "Hola"; si es otro nombre, le responderá "No te conozco".

14.2. Acceder a las letras de una cadena

Podemos acceder a las letras que forman una cadena usando corchetes, como si se tratara de un array de caracteres, en el que el primer elemento está en la posición 1 y la cantidad de letras se sabe con "length":

(* STRING2.PAS, Acceder a las letras de un string  *)
(* Curso de Pascal, por Nacho Cabanes              *)

program String2;

var
    saludo: string;

begin
    saludo := 'Hola, soy un texto';
    writeLn( 'El texto tiene ', length(saludo), ' letras' );
    writeLn( 'La primera es ', saludo[1] );
end.

(* Resultado:
El texto tiene 18 letras
La primera es H
*)

Ejercicio propuesto 14.3: Crea un programa que te pida tu nombre y lo muestre al revés (de la última letra a la primera).

14.3. Operaciones habituales con cadenas

Podemos crear una cadena a partir de varias (concatenar), usando el símbolo de la suma o la orden concat, que a la que indicaremos varias subcadenas entre paréntesis:

(* STRING3.PAS, Concatenar cadenas     *)
(* Curso de Pascal, por Nacho Cabanes  *)

program String3;

var
    palabra1, palabra2, espacio: string;
    resultado1, resultado2: string;

begin
    palabra1 := 'Hola';
    espacio := ' ';
    palabra2 := 'Pascal';

    resultado1 := palabra1 + espacio + palabra2 + '!';
    resultado2 := concat(palabra1, '-', palabra2);
    writeLn( resultado1 );
    writeLn( resultado2 );
end.

(* Resultado:
Hola Pascal!
Hola-Pascal
*)

Ejercicio propuesto 14.4: Crea un programa que pida al usuario su nombre y su apellido, cree una cadena formada por el apellido, una coma y el nombre (por ejemplo si el usuario introduce Nacho como nombre y Cabanes como apellido, la cadena contendrá "Cabanes, Nacho"), y finalmente escriba esa cadena.

Si necesitamos partir de una cadena vacía (por ejemplo, para irle añadiendo letras) o bien queremos vaciar una cadena ya existente, lo podemos hacer usando dos comillas simples que no contengan nada entre medias (ni siquiera un espacio):

(* STRING4.PAS, Vaciar una cadena     *)
(* Curso de Pascal, por Nacho Cabanes *)

program String4;

var
    texto: string;
    i: integer;

begin
    texto := '';
    writeLn( 'El texto es ', texto );

    for i := 1 to 10 do
        texto := texto + '-';
    writeLn( 'Ahora el texto es ', texto );
end.

(* Resultado:
El texto es
Ahora el texto es ----------
*)

Ejercicio propuesto 14.5: Crea un programa que cree y muestre una cadena formada por 20 símbolos de exclamación (!).

Podemos extraer una subcadena (un fragmento del texto original) con la orden copy, que debe recibir tres parámetros: la cadena, la posición de comienzo y la cantidad de caracteres a extraer:

(* STRING5.PAS, Extraer una subcadena *)
(* Curso de Pascal, por Nacho Cabanes *)

program String5;

var
    texto: string;

begin
    texto := 'Hola, esto es un ejemplo';
    writeLn( 'La primera palabra es ', copy(texto,1,4) );
    writeLn( 'Otro fragmento es "', copy(texto,9,5), '"' );
end.

(* Resultado:
La primera palabra es Hola
Otro fragmento es "to es"
*)

Ejercicio propuesto 14.6: Crea un programa que te pida tu nombre y escriba un triángulo creciente, que empiece con una letra, siga con dos y vaya aumentando hasta mostrar todas las letras: N Na Nac Nach Nacho

También es posible ver si contiene una subcadena, usando pos, que recibe como datos la subcadena a buscar y la cadena que la contiene, y devolverá 0 si no aparece, o un número mayor que cero (la posición) en caso de que sí esté contenida:

(* STRING6.PAS, Posicion de una subcadena *)
(* Curso de Pascal, por Nacho Cabanes     *)

program String6;

var
    texto: string;

begin
    texto := 'Hola, esto es un ejemplo';
    writeLn( 'La palabra "esto" aparece en la posicion ',
        pos('esto', texto));
end.

(* Resultado:
La palabra "esto" aparece en la posicion 7
*)

Ejercicio propuesto 14.7: Crea un programa que pida al usuario una frase y diga si contiene la palabra "hola" y, en caso afirmativo, en qué posición._

Finalmente, también tenemos la posibilidad de insertar una subcadena, usando insert, o de borrar una subcadena, con delete. A "insert" se le indican 3 datos: el texto a insertar, la cadena dentro de la que queremos incluirlo, y la posición en la que debe aparecer; a "delete" se le detalla la cadena, la posición en la que empezar a borrar y la cantidad de letras a eliminar:

(* STRING7.PAS, Insertar y borrar en una cadena *)
(* Curso de Pascal, por Nacho Cabanes           *)

program String7;

var
    texto: string;

begin
    texto := 'Hola, esto es un ejemplo';
    writeLn( 'El texto original es ', texto );

    insert( ' amigo,', texto, 6);
    writeLn( 'Tras insertar queda ', texto );

    delete( texto, 14, 5);
    writeLn( 'Y tras borrar queda ', texto );
end.

(* Resultado:
El texto original es Hola, esto es un ejemplo
Tras insertar queda Hola, amigo, esto es un ejemplo
Y tras borrar queda Hola, amigo, es un ejemplo
*)

Ejercicio propuesto 14.8: Crea un programa que pida al usuario su nombre. Si el nombre incluye "Sr. ", deberás borrar esa partícula. Donde estuviera ese "Sr. ", deberás incluir "Usuario del sistema: ".

Además, algunas versiones de Pascal permiten convertir un texto a minúsculas o a mayúsculas de forma simple. Por ejemplo, con FreePascal se puede usar upperCase(x) para convertir un string a mayúsculas y lowerCase(x) para convertir a minúsculas.

Ejercicio propuesto 14.9: Crea un programa que pida al usuario su nombre y lo muestre en mayúsculas

30916 visitas desde el 19-07-2019

AnteriorPosterior