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-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback