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 |