migf1 έγραψε:Star_Light έγραψε:Λοιπον μεσα στον αλγοριθμο βάζεις ουσιαστικα αυτο
- Κώδικας: Επιλογή όλων
if(*s1=='\0')
s1++;
return 0;
αυτο για μενα... με οσα ξερω ως τωρα σημαινει... ΑΝ Ο δεικτης δειχνει στο τελος του C string τοτε αυξησε τον κατα 1 και επεστρεψε 0.
Έτσι είναι, με τη διαφορά πως αυτό το if βρίσκεται μέσα σε ένα loop, οπότε όλο μαζί σημαίνει:
- Κώδικας: Επιλογή όλων
όσο ο δείκτης ΔΕΝ δείχνει στο τέλος του 1ου string προχώρα τον μια θέση και συνέχισε, αλλά μόλις δείξει στο τέλος του string τότε μη συνεχίσεις άλλο κι επέστρεψε απευθείας την τιμή 0
btw, έχεις ξεχάσει τα άγκιστρα στον κώδικα που έδωσες παραπάνω. Χωρίς άγκιστρα, εκτελεί μονάχα το s1++ ( εσύ θες και το: return 0; )έγραψε:Επομενως δεν καταλαβαινω για ποιο λογο οσο ο s1 δεν δειχνει στο τελος της συμβολοσειρας για ποιο λογο πρεπει να αυξανεται.
Αν δεν τον αυξήσεις, θα μείνει στον 1ο χαρακτήρα του 1ου string καθ' όλη τη διάρκεια του loop και θα συγκρίνει πάντα τον 1ο χαρακτήρα του 1ου string με τους χαρακτήρες του 2ου string (αφού ο s2++ αυξάνεται κανονικά σε κάθε επανάληψη).έγραψε:Π.Σ Στο μεταξυ εχεις πει πως το προβλημα με τους μετρητες εξαλειφεται επειδη αυξανονται και οι δυο ταυτοχρονα.... εδω στους δεικτες δεν θα μπορουσαμε να το κανουμε αυτο??? πχ
- Κώδικας: Επιλογή όλων
while(*s1++==*s2++)
Αν το κάνεις αυτό, τότε μέσα στο σώμα του while, στο if ( *s1 == '0') αντί να ελέγχεις τον εκάστοτε τρέχοντα χαρακτήρα του 1ου string θα ελέγχεις τον επόμενό του, μιας και το *s1++ στη συνθήκη του while-loop συγκρίνει τον τρέχοντα *s1 με τον τρέχοντα *s2 αλλά αμέσως μετά πάει στους αμέσως επόμενους χαρακτήρες.
Μαλιστα... δηλαδη αν υποθέσουμε πως έχουμε μια while και μεσα της μια if εστω οτι παμε με τον παλιο ισχυρισμο οτι δηλαδη αν ο δεικτης δειχνει ... |αφου δεν δειχνει| επομενως ΟΣΟ ΔΕΝ δειχνει...... οκ τωρα το δεχομαι. ΑΠλα επρεπε να κάνω εναν "λογισμο" και μια συνθεση στις προτασεις πρωτα. Επομενως παω να κανω ενα ακομη trace για την 2η φάση μετα το (a-a) που εδειξα παραπανω.


