Pascal - Cuerdas

La cadena en Pascal es en realidad una secuencia de caracteres con una especificación de tamaño opcional. Los caracteres pueden ser numéricos, letras, espacios en blanco, caracteres especiales o una combinación de todos. Extended Pascal proporciona numerosos tipos de objetos de cadena según el sistema y la implementación. Discutiremos los tipos más comunes de cadenas que se utilizan en los programas.

Puede definir una cadena de muchas formas:

  • Character arrays - Ésta es una cadena de caracteres que es una secuencia de cero o más caracteres del tamaño de un byte entre comillas simples.

  • String variables - La variable de tipo String, como se define en Turbo Pascal.

  • Short strings - La variable de tipo String con especificación de tamaño.

  • Null terminated strings - La variable de pchar tipo.

  • AnsiStrings - Ansistrings son cadenas que no tienen límite de longitud.

Pascal proporciona solo un operador de cadena, el operador de concatenación de cadenas (+).

Ejemplos

El siguiente programa imprime los primeros cuatro tipos de cadenas. Usaremos AnsiStrings en el siguiente ejemplo.

program exString;
var
   greetings: string;
   name: packed array [1..10] of char;
   organisation: string[10];
   message: pchar;

begin
   greetings := 'Hello ';
   message := 'Good Day!';
   
   writeln('Please Enter your Name');
   readln(name);
   
   writeln('Please Enter the name of your Organisation');
   readln(organisation);
   
   writeln(greetings, name, ' from ', organisation);
   writeln(message); 
end.

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Please Enter your Name
John Smith
Please Enter the name of your Organisation
Infotech
Hello John Smith from Infotech

El siguiente ejemplo hace uso de algunas funciones más, veamos:

program exString;
uses sysutils;
var
   str1, str2, str3 : ansistring;
   str4: string;
   len: integer;

begin
   str1 := 'Hello ';
   str2 := 'There!';
   
   (* copy str1 into str3 *)
   str3 := str1;
   writeln('appendstr( str3, str1) :  ', str3 );
   
   (* concatenates str1 and str2 *)
   appendstr( str1, str2);
   writeln( 'appendstr( str1, str2) ' , str1 );
   str4 := str1 + str2;
   writeln('Now str4 is: ', str4);
   
   (* total lenghth of str4 after concatenation  *)
   len := byte(str4[0]);
   writeln('Length of the final string str4: ', len); 
end.

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

appendstr( str3, str1) : Hello
appendstr( str1, str2) : Hello There!
Now str4 is: Hello There! There!
Length of the final string str4: 18

Funciones y procedimientos de cadena de Pascal

Pascal admite una amplia gama de funciones y procedimientos que manipulan cadenas. Estos subprogramas varían según el implemento. Aquí, enumeramos varios subprogramas de manipulación de cadenas proporcionados por Free Pascal:

No Señor. Función y propósito
1

function AnsiCompareStr(const S1: ; const S2:):Integer;

Compara dos cadenas

2

function AnsiCompareText(const S1: ; const S2:):Integer;

Compara dos cadenas, no distingue entre mayúsculas y minúsculas

3

function AnsiExtractQuotedStr(var Src: PChar; Quote: Char):;

Elimina las comillas de la cadena

4

function AnsiLastChar(const S:):PChar;

Obtiene el último carácter de la cadena

5

function AnsiLowerCase(const s:):

Convierte la cadena a minúsculas

6

function AnsiQuotedStr(const S: ; Quote: Char):;

Cotiza una cadena

7

function AnsiStrComp(S1: PChar;S2: PChar):Integer;

Compara cadenas que distinguen entre mayúsculas y minúsculas

8

function AnsiStrIComp(S1: PChar; S2: PChar):Integer;

Compara cadenas que no distinguen entre mayúsculas y minúsculas

9

function AnsiStrLComp(S1: PChar; S2: PChar; MaxLen: Cardinal):Integer;

Compara L caracteres de cadenas sensibles a mayúsculas y minúsculas

10

function AnsiStrLIComp(S1: PChar; S2: PChar; MaxLen: Cardinal):Integer;

Compara L caracteres de cadenas que no distinguen entre mayúsculas y minúsculas

11

function AnsiStrLastChar(Str: PChar):PChar;

Obtiene el último carácter de la cadena

12

function AnsiStrLower(Str: PChar):PChar;

Convierte la cadena a minúsculas

13

function AnsiStrUpper(Str: PChar):PChar;

Convierte la cadena en mayúsculas

14

function AnsiUpperCase(const s:):;

Convierte la cadena en mayúsculas

15

procedure AppendStr(var Dest: ; const S:);

Agrega 2 cadenas

dieciséis

procedure AssignStr(var P: PString; const S:);

Asigna valor de cadenas en el montón

17

function CompareStr(const S1: ; const S2:):Integer; overload;

Compara dos cadenas distingue entre mayúsculas y minúsculas

18

function CompareText(const S1: ; const S2:):Integer;

Compara dos cadenas que no distinguen entre mayúsculas y minúsculas

19 procedure DisposeStr(S: PString); overload;

Elimina la cadena del montón

20

procedure DisposeStr(S: PShortString); overload;

Elimina la cadena del montón

21

function IsValidIdent( const Ident:):Boolean;

¿Es la cadena un identificador pascal válido?

22

function LastDelimiter(const Delimiters: ; const S:):Integer;

Última aparición de carácter en una cadena

23

function LeftStr(const S: ; Count: Integer):;

Obtiene los primeros N caracteres de una cadena

24

function LoadStr(Ident: Integer):;

Carga cadenas de recursos

25

function LowerCase(const s: ):; overload;

Convierte la cadena a minúsculas

26

function LowerCase(const V: variant ):; overload;

Convierte la cadena a minúsculas

27

function NewStr(const S:):PString; overload;

Asigna nueva cadena en el montón

28

function RightStr(const S: ; Count: Integer):;

Obtiene los últimos N caracteres de una cadena

29

function StrAlloc(Size: Cardinal):PChar;

Asigna memoria para cadena

30

function StrBufSize(Str: PChar):SizeUInt;

Reserva memoria para una cadena

31

procedure StrDispose(Str: PChar);

Elimina la cadena del montón

32

function StrPas(Str: PChar):;

Convierte PChar a cadena pascal

33

function StrPCopy(Dest: PChar; Source:):PChar;

Copia cadena pascal

34

function StrPLCopy(Dest: PChar; Source: ; MaxLen: SizeUInt):PChar;

Copia N bytes de cadena pascal

35

function UpperCase(const s:):;

Convierte la cadena en mayúsculas