Appunti d’Informatica
Stringhe
Programmi Pascal
Le stringhe
Una stringa può essere dichiarata o come string (in questo caso può contenere al massimo 255
caratteri) o come string[m] con m≤255 (in questo caso il numero massimo di caratteri che può
contenere è m). Se da input si inseriscono più caratteri di quelli consentiti allora quelli in eccesso
verranno tralasciati. Una stringa dove sono stati inseriti n caratteri (n≤ di quelli consentiti) può
essere pensata come un array di n+1 elementi dove l’elemento di posizione 0 contiene il carattere
il cui codice ASCII è uguale alla lunghezza effettiva della stringa. Cosa importante da tenere
presente è che la lunghezza e quindi il carattere di posizione 0 viene aggiornato automaticamente
dall’input con il comando Readln o con l’assegnazione alla stringa ma non da operazioni sui singoli
caratteri.
Operazioni con le stringhe
1. Varie operazioni sulle stringhe
Program stringhe;
uses crt;
var s,SS:string;
k,j:Byte;
begin
readln(s);
(* stampa un carattere della stringa uno alla volta *)
for k:=1 to length(s) do writeln(s[k]);
(* stampa il primo e l'ultimo carattere *)
writeln(s[1],s[length(s)]);
(* copia tutte le vocali presenti in s nella variabile SS *)
j:=0;
for k:=1 to length(s) do
if upcase(s[k]) in ['A','E','I','O','U'] then begin
inc(j);
SS[j]:=s[k]
end;
SS[0]:=chr(j); (* assegna la lunghezza della stringa SS *)
writeln(SS);
(* o più semplicemente nel seguente modo *)
for k:=1 to length(s) do
if upcase(s[k]) in ['A','E','I','O','U'] then SS:=SS+s[k];
(* sostituisce a tutti i caratteri di posto dispari il carattere = *)
for k:=1 to length(s) do if odd(k) then s[k]:='=';
writeln(s);
repeat until keypressed
end.
Prof. A.Venia
Pagina 1
Appunti d’Informatica
Stringhe
Programmi Pascal
2. Data da input una stringa S e un intero N non più grande della lunghezza della stringa,
modificare la stringa in modo tale da eliminare da essa il carattere di posto N. (Simula la
procedura del linguaggio Pascal DELETE(stringa, inizio, numerocaratteri); con la limitazione
numerocaratteri=1).
program Elimina1Carattere;
uses crt;
var S:string;
N,I:byte;
begin
clrscr;
write('Stringa
: '); readln(S);
(* il seguente ciclo serve ad imporre ad N un valore che non
superi la lunghezza della stringa *)
repeat
write('Posizione : '); readln(N);
until N<=length(S);
(* copia tutti i caratteri da N+1 alla lunghezza della stringa
nella posizione precedente *)
for I:=N+1 to length(S) do S[I-1]:=S[I];
(* diminuisce di 1 la lunghezza della stringa *)
S[0]:=pred(S[0]);
write(S);
repeat until keypressed
end.
Generalizziamo il precedente algoritmo facendo in modo tale che
dalla stringa di partenza dalla posizione N si possano eliminare X
caratteri.
program EliminaXCaratteri;
uses crt;
var S:string;
N,X,I,L:byte;
Begin
clrscr;
write('Stringa iniziale : '); readln(S);
L:=length(S);
repeat
write('Posizione
: '); readln(N);
write('N° caratteri
: '); readln(X);
until N+X<=L;
for I:=N+X to L do S[I-X]:=S[I];
S[0]:=chr(L-X);
write((#10,'Stringa finale
: ',S);
repeat until keypressed
end.
Prof. A.Venia
Pagina 2
Appunti d’Informatica
Stringhe
Programmi Pascal
3. Data da input una stringa S si vuole calcolare qual è l’occorrenza di tutte le lettere del’alfabeto
inglese composto da 26 caratteri (non si terrà in considerazione la differenza fra minuscole e
maiuscole.
Program occorrenze;
uses crt;
var S:string;
NC:Array['A'..'Z'] of byte;
k:byte;
c:char;
begin
clrscr;
writeln(' Data da input una stringa, calcola l''occorrenza di
ogni carattere dell''alfabeto');
write('Stringa : '); readln(S);
for k:=1 to length(s) do inc(NC[Upcase(S[k])]);
writeln(#10,'Elenco occorrenze');
for c:='A' to 'Z' do writeln(c,NC[c]:4);
repeat until keypressed
end.
indice
L’algoritmo proposto utilizza un array di 26 elementi
il cui indice è un carattere che va da 'A' a 'Z' di
tipo byte. Tale array conterrà alla fine il numero di
occorrenze che la lettera relativa al suo indice
presenta nella stringa data.
Esempio. Se ad S dessimo il valore ‘Data da input una
stringa, calcola il numero di occorrenze di ogni
lettera dell'alfabeto inglese’ allora il risultato
sarebbe quello elencato nella tabella accanto.
Inizialmente l’array NC è vuoto o meglio tutti i suoi
elementi sono inizializzati a zero. Per k=1 si ha
S[k]=’D’, Upcase(S[k])=’D’ per cui verrà incrementata
di uno la casella NC[Upcase(S[k])] cioè NC[‘D’] e
così via di seguito per gli altri caratteri della
stringa S fino a length(s).
Prof. A.Venia
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
NC
10
1
4
5
9
1
3
0
7
0
0
8
1
7
6
1
0
5
2
6
3
0
0
0
0
1
Pagina 3