Δημοσιεύτηκε: 30 Αύγ 2011, 20:23
από migf1
Παρακαλώ Γιώργο :)

Λοιπόν δίνω και τη δική μου υλοποίηση της s_compare() που είναι με δείκτες. Ότι δεν καταλαβαίνετε να το ξεδιαλύνουμε και κατόπιν να το μετατρέψετε μόνοι σας σε έκδοση που αντί για δείκτες θα χρησιμοποιεί μετρητές (θα σας βοηθήσει να κατανοήσετε καλύτερα και τις 2 εκδόσεις).

Κώδικας: Επιλογή όλων

int s_compare( const char *s1, const char *s2 )
{
while ( *s1 == *s2++ )
if ( !*s1++ )
return 0;

return (int)(*s1 - *--s2);
}

Κατόπιν θα προσθέσουμε κάποιους έξτρα ελέγχους, που δεν τους κάνει ούτε η strcmp() με τους οποίους θα αποτρέπουμε τη πιθανότητα να κρασάρει το πρόγραμμά μας αν έστω και κατά λάθος περαστούν ως NULL είτε το s1 είτε το s2 στη συνάρτησή μας (η strcmp κρασάρει... δοκιμάστε π.χ.: strcmp( NULL, "ab") ή strcmp( "", NULL) ή strcmp( NULL, NULL )... θα κρασάρει).

Πρώτα όμως να λύσουμε τυχόν απορίες και να μετατρέψετε τον κώδικα σε έκδοση με μετρητές αντί για δείκτες.