Home / Indice sezione
 www.icosaedro.it 

M2 Report

<= Stringhe letteraliCommenti =>
Frontespizio
Introduzione
Caratteristiche
Un semplice esempio
Moduli
Sezione IMPORT
Sezione CONST
Sezione TYPE
Tipo FORWARD
Sezione VAR
Sezione FUNCTION
Sezione BEGIN
Stringhe letterali
Sottostringhe
Commenti
Costanti predefinite
Variabili predefinite
Funzioni predefinite
Istruzione di assegnamento
Istruzione per la chiamata di funzione
Ordine di valutazione degli argomenti attuali
Istruzione IF
Istruzione SWITCH
Istruzione FOR
Istruzione WHILE
Istruzione REPEAT
Istruzione LOOP
Istruzione TRY
Istruzione RAISE ERROR
Istruzione RETURN
Espressioni logiche
Espressioni intere
Espressioni reali
Espressioni stringa
Espressioni tra tipi strutturati
Regole di scope
M2 per programmatori C
M2 per programmatori Java
Rappresentazione dei dati in memoria
Keywords
Messaggi di errore a runtime
Sintassi
 

Sottostringhe

Una stringa non NIL può contenere zero o più caratteri. Possiamo immaginare di ordinare i caratteri su di una scala graduata come nella figura qui sotto. L'operatore di sottostringa s[i,j] applicato a una stringa s permette di estrarne l'intervallo che va da i a j. Questo intervallo contiene esattamente (j-i) caratteri.

La funzione length(s) ritorna la lunghezza della stringa. Pertanto s[0,length(s)] è la stringa stessa.

L'intervallo specificato deve essere interamente contenuto nell'intervallo dei caratteri della stringa, cioè

0 <= i <= j <= length(s)

L'intervallo di lunghezza nulla [i,i] ritorna la stringa vuota "".

Se l'operatore di sottostringa viene applicato a una stringa NIL, oppure se l'intervallo non è valido, il programma viene terminato con errore.

Spesso occorre estrarre un singolo carattere da una stringa. A questo scopo l'operatore di sottostringa ammette anche la forma abbreviata con un solo indice s[i] che equivale a s[i,i+1].

Ad esempio, data la variabile stringa (v. figura)

s = "ABCDEFG"

allora si ha

s[2] ==> "C"
s[2,5] ==> "CDE"
s[2,2] ==> ""
s[0,length(s)] ==> "ABCDEFG"

L'operatore di sottostringa può essere applicato a variabili di tipo STRING e a funzioni che ritornano STRING. Non è possibile eseguire assegnamenti su sottostringhe, e pertanto questo codice non è valido:

s[1] = "B"

Nel programma che segue, la funzione Reverse(s) ritorna la stringa con i caratteri invertiti. Ad esempio Reverse("ABCDEFG") ritorna GFEDCBA.

MODULE ReverseTest

IMPORT m2

FUNCTION Reverse(s: STRING): STRING
VAR l: INTEGER
BEGIN
    l = length(s)
    IF l < 2 THEN
        RETURN s
    ELSE
        RETURN Reverse(s[l DIV 2, l]) + Reverse(s[0, l DIV 2])
    END
END

BEGIN
    print( Reverse("ABCDEFG") )
END

Il meccanismo di funzionamento è il seguente: la stringa invertita si può ottenere spezzando la stringa in due e scambiando l'ordine delle due parti dopo avere invertito a loro volta ciascuna parte. Osserviamo che la funzione Reverse funziona coerentemente anche se la stringa che le viene passata come parametro è NIL o vuota. Infatti se la stringa è NIL o vuota, la funzione length(s) ritorna zero e l'operatore di sottostringa non viene applicato.

 
<= Stringhe letteraliCommenti =>

Umberto Salsi

Contatto
Mappa
Home / Indice sezione