Tags:
create new tag
view all tags

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

Edit | Attach | Watch | Print version | History: r4 < r3 < r2 < r1 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r4 - 2003-10-04 - AndreaSterbini






 
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback