Confronto tra stringhe
Per confrontare due stringhe, facciamo una funzione la quale gli passeremo come argomenti due stringhe da confronatare.
Essa come risposta alla nostra chiamata, ci restituirà: "-1" se la seconda stringa è minore della prima, "1" il contrario (prima > seconda), 0 se le due stringhe sono uguali.
Le due stringhe vengono confrontate
lessicograficamente, ovvero vengono confrontate un carattere per volta a partire dal primo.
Due stringhe
x ed
y che iniziano con la stessa successione di
n caratteri ma differiscono nel carattere
n---+1 esimo sono:
- x < y se il carattere n---+1 esimo di x ha valore (codice ASCII) minore del corrispondente carattere in y
- x > y se il carattere è maggiore del corripondente
- x = y se hanno la stessa lunghezza e sono identiche
Esempio:
- 'abcdef' < 'abcghi' ('d' < 'g')
- 'abcdef' > 'abcc' ('d' > 'c')
- 'abcd' > 'abcceuoqiueo' ('d' > 'c')
/* mystrcmp */
int mystrcmp(char *prima, char *seconda)
{
int i = 0;
/* si ferma al primo carattere diverso tra le due stringhe
* oppure, quando è giunto alla fine di una delle due stringhe */
while((prima[i] == seconda[i]) && (prima[i] != '\0') && seconda != '\0')
i---++;
/* ora vado a confrontare i due caratteri che differiscono */
/* NOTA: il carattere terminatore delle tringhe cioè '\0' vale "0",
* perciò è minore di tutti i caratteri! */
/* se il carattere della prima stringa è maggiore della seconda */
if(prima[i] > seconda[i]) return 1; /* prima > seconda */
/* se il carattere della prima stringa è minore della seconda */
if(prima[i] < seconda[i]) return -1; /* prima < seconda */
/* naturalmente se i caratteri non differiscono sono uguali. */
/* Se arrivo qua, significa che le stringhe sono uguali e come
* se andassi a confrontare i due caratteri terminatori, che
* sono uguali. */
return 0; /* prima = seconda */
}
--
MarcoEsposito - 19 Nov 2002