Δημοσιεύτηκε: 01 Σεπ 2011, 23:35
stamatiou έγραψε:Εγώ δεν έχω καταλάβει γιατί υπάρχει αυτό return (int)(*s1 - *--s2);
Από τη στιγμή που η συνάρτηση επιστρέφει μια οποιαδήποτε αρνητική ή μια οποιαδήποτε θετική τιμή ανάλογα με το αν ο πρώτος ανόμοιος χαρακτήρας στο 1o string έχει μικρότερο ή μεγαλύτερο ASCII code από τον αντίστοιχο χαρακτήρα του 2ου string, μας αρκεί να αφαιρέσουμε το ASCII code του χαρακτήρα στο 2ο string από το ASCII code του αντίστοιχου χαρακτήρα στο 1ο string.
Δηλαδή, *s1 - *s2
Αυτός είναι ο κυρίαρχος υπολογισμός για την τιμή επιστροφής της συνάρτησης, ο ας τον πούμε default. Το loop που προηγείται, χρησιμοποιείται αφενός για να βρει τον 1ο ανόμοιο χαρακτήρα ανάμεσα στα 2 strings, κι αφετέρου για να αντιμετωπίσει επί μέρους συνθήκες τερματισμού, όπως είναι όταν τελειώσουν οι χαρακτήρες του s1 χωρίς να έχει βρεθεί ανόμοιος
Το *--s2 στον 2ο όρο της αφαίρεσης στον κυρίαρχο υπολογισμό, επαναφέρει τον δείκτη του 2ου string μια θέση προς τα πίσω, πριν πραγματοποιήσει την αφαίρεση... βρείτε μόνοι σας το γιατί ως άσκηση (hint: κάντε trace τον αλγόριθμο με διάφορα test-cases για τα strings s1 και s2