Le stringhe sono a parer mio il tipo di variabile più interessante in pascal.

Iniziamo col dire che una variabile string viene dicharata in pascal con il seguente modo:

var s: string

nulla di più semplice.

A questo punto s sarà una variabile che potrà contenere una serie di caratteri. Se si vuole dichiarare una variabile che abbia esattamente un determinato numero di caratteri si piò usare la sintassi

var s : string[10];

ciò vuole dire che la variabile s conterrà sino ad un massimo di 10 caratteri. Se ad esempio noi scriviamo questo blocco di codice

var s:string[10];
begin
s:= 'Ciaociaociaociao';
Writeln(s);
readln;
end.

dove assegnamo ad s una stringa con 16 caratteri, noi otterremo in output i primi 10 caratteri: Ciaociaoci

 

Esistono in pascal diverse funzioni o procedure che permettono di lavorare sulle stringhe. Vi cito le più importanti (che poi coincidono con quelle che conosco):

  • copy(s:string;i:integer,n:integer):string

E' una funzione che restituisce parte di una stringa di partenza: s è la stringa di partenza, i è il numero intero che indica la posizione da cui iniziare a copiare, n è il numero intero che indica la posizione finale. Esempio:

var s,stringacopiata: string;
begin
s:= 'Ciao come stai?';
stringacopiata:= copy(s,3,7);
writeln(stringacopiata);
end.

avrò in output ao come, in quanto abbiamo detto al compilatore di copiare la stringa s dal terzo carattere (a) al settimo carattere (e).

  • concat(s1,s2,...s3:string):string;

serve semplicemente a concatenare più string. Può essere anche sostituito dal codice 

s:= s1 + s2 + s3 + s4 ...

e la stringa risultante sarà la somma delle diverse stringhe. Esempio:

s1:= 'Ciao';
s2:= 'come';
s3:= 'stai?';
s:= s1 + s2 + s3;
s:= concat(s1,s2,s3);
writeln(s);

il risultato è sempre lo stesso: otterremo ciaocomestai? Attenzione agli spazi: non vengono aggiunti da soli :) basterebbe anche aggiungere una stringa ' ', esempio:

s:= s1 + ' ' + s2 + ' '+ s3

oppure, con la funzione concat:

 

spazio:= ' ';
s:= concat(s1,spazio,s2,spazio,s3,spazio,...);  

 

  • delete(s:string; i,n :integer);

Serve a cancellare parte di una stringa: data la stringa s essa verrà privata dei suoi caratteri che occupano le posizioni da i a n.

  • insert(s1, s:string; n:integer);

E' la procedura che serve ad inserire una stringa s1 dentro la stringa s in coincidenza della posizione n

  • StrToInt(s:string):integer;

Data la stringa s essa verrà trasformata in una variabile di tipo intero. E' utilizzatissima per convertire le stringhe immesse ad esempio in una TEdit se stiamo parlando di Delphi  in un numero utilizzabile come intero. Esempio:

var s:string;
     n:integer;
begin
s:= '123';
n:= StrToInt(s);
end;

in questo modo possiamo ottenere la variabile intera n da utilizzare come un numero. Ad esempio possiamo sfruttare operazioni matematiche come: n:= StrToInt(s) + 5  che restituirà come risultato 123+5 = 128.

  • IntToStr(i:integer):String;

Esattamente l'opposto della precedente: dato un numero intero, lo converte in una variabile di tipo string da utilizzare come una normale stringa con tutte le sue funzioni.

  • FloatToStr(i:real):string;

E' molto simile alla precedente solo che trasforma un numero in cifra mobile (quindi real, ad esempio 35.6235) in una stringa

  • StrToFloat(s:string):real;

Restituisce data una stringa un numero a riga mobile utilizzabile quindi in procedimenti matematici, proprio come accade per StrToInt.

  • Length(s:string):integer;

Restituisce un numero intero indicante il numero di caratteri di una stringa s. E' utilizzatissimo per lavorare sulle stringhe in diversissime occasioni.

 

Posto un esempio che permette di riscrivere una stringa al contrario:

var i: integer; s,k:string;

begin
s:= 'Ciao come va?';
k:='';
for i:= length(s) downto 1 do
   k:= k + s[i];
writeln(k);
end.

Spiego: inserisco un ciclo for che parte dal numero corrispondente al numero di caratteri della variabile s per arrivare a 1. In questo ciclo assegno man mano alla variabile string k che precedentemente ho azzerato con k:= ''; ogni carattere di s corrispondente alla posizione i. Ottero k = '?av emoc oaiC'.