Μερικές συναρτήσεις συμβολοσειρών |
Οι συμβολοσειρές είναι ιδιαίτερα χρήσιμες στην επεξεργασία κειμένου κάθε είδους. Μη ξεχνάτε οτι και τα προγράμματά μας είναι κείμενα μιάς ειδικής γλώσσας, άρα και η μετάφραση ενός προγράμματος είναι μιά εξειδικευμένη επεξεργασία κειμένου. Τελικά στη μνήμη του υπολογιστή όλες οι πληροφορίες (εντολές, αριθμοί, χαρακτήρες) δεν είναι παρά σύμβολα. Επίσης πολλά προγράμματα συστημάτων (όπως γιά παράδειγμα οι επικοινωνίες) στηρίζονται σε επεξεργασία συμβολοσειρών. Γι' αυτούς τους λόγους η C παρέχει μιά βιβλιοθήκη συναρτήσεων γιά την επεξεργασία συμβολοσειρών. Το πρόγραμμα που βρίσκεται στο αρχείο STRINGS.C δίνει παραδείγματα μερικών συναρτήσεων. Στην αρχή του προγράμματος σημειώστε το όνομα του αρχείου κεφαλής της βιβλιοθήκης συναρτήσεων γιά τη διαχείριση συμβολοσειρών, STRING.H. Στη συνέχεια δηλώνονται 4 συμβολοσειρές. Στις εκτελέσιμες εντολές ξεκινούμε με μιά πολύ χρήσιμη συνάρτηση που επιτρέπει την αντιγραφή μιάς συμβολοσειράς σε μιά άλλη, την strcpy. Η αντιγραφή δαικόπτεται όταν στη συμβολοσειρά - παραγωγό βρεθεί ο μηδενικός χαρακτήρας, δηλαδή for(i = 0; (consum[i] = produc[i]); i++); Προσέξτε τη συνθήκη ελέγχου που κανει ουσιαστικά όλη τη δουλειά. Εκχωρεί έναν χαρακτήρα από τον παραγωγό στον καταναλωτή αλλά επειδή η εκχώρηση είναι και έκφραση έχει ως εξαγόμενο τη τιμή του χαρακτήρα produc[i]. 'Οταν βρεθεί ο μηδενικός χαρακτήρας η συνθήκη γίνεται ψευδής και η επανάληψη τερματίζεται. Σημειώστε το ερωτηματικό μετά το κλείσιμο της παρένθεσης.: σημαίνει οτι το for έχει άδειο σώμα, δηλαδή δεν εκτελεί καμμία πρόταση. Όπως φαίνεται στο πρόγραμμα η strcpy δουλεύει με παραγωγό είτε σταθερά είτε μεταβλητή συμβολοσειρά. Γιά τις σταθερές συμβολοσειρές χρησιμοποιούμε το διπλό εισγωγικό. Η strcpy μπορεί να παρομοιαστεί με μιά εκχώρηση μεταξύ συμβολοσειρών. Μετά την εκτέλεση των τριών συναρτήσεων strcpy οι τρείς μεταβλητές συμβολοσειρές name1, name2, και title έχουν τις αντίστοιχες σταθερές συμβολοσειρές, όπως μπορεί κανείς να διαπιστώσει ςπό τις εκτυπώσεις του αποτελέσματος. This is the title. Name1 is Rosalinda Name2 is Zeke The biggest name alphabetically is Zeke Both names are Rosalinda Zeke Η επόμενη συνάρτηση που συνατάμε στο πρόγραμμα είναι η strcmp η οποία συγκρίνει δύο συμβολοσειρές ας πούμε s1 και s2. Επιστρέφει 1 αν η s1 είναι μεγαλύτερη, 0 ανα είναι ίσες, -1 αν η s2 είναι μεγαλύτερη. Η σύγκριση γίνεται σύμφωνα με τον κώδικα ASCII. Δύο συμβολοσειρές είναι ίσες αν έχουν το ίδιο μήκος και ίδιους χαρακτήρες σε κάθε θέση. Μιά συμβολοσειρά είναι μεγλύτερη από μία άλλη εάν (α) έχει μεγαλύτερο μήκος ή (β) σε κάποια θέση υπάρχει χαρακτήρας που έχει μεγαλύτερο κωδικό ASCII από τον αντίστοιχο χαρακτήρα της άλλης συμβολοσειράς. Γιά παράδειγμα η συμβολοσειρά Zeke είναι μεγαλύτερη από τη Rosalina γιατί το Z έχει μεγαλύερο κωδικό από το R. Παρόμοια η συμβολοσειρα Rosalina είναι μεγαλύτερη από τη συμβολοσειρά Rosa γιατί έχει περοσσότερα γράμματα ενώ οσα έχουν είναι ίδια. Υπάρχουν συναρτήσεις βιβλιοθήκης που λαμβάνουν υπ΄όψη και τα άν τα γράμματα είναι κεφαλαία ή πεζά κ.ο.κ. Η λειτουργία της συνάρτησης strcmp μπορεί φυσικά να εκφραστεί με μιά επαναληπτική διαδικασία και προτάσεις απόφασης. Αφήνεται ως άσκηση στον αναγνώστη. Το αποτέλεσμα που επιστρέφει η strcmp συγκρίνεται με το 0. Εάν είναι μεγαλύτερο του μηδενός, δηλαδή εάν η συμβολοσειρά name1 είναι μεγαλύτερη από την name2 τότε αυτή αντιγράφεται στη συμβολοσειρά mixed. Εάν το αποτέλεσμα της strcmp είναι μικρότερο ή ίσο με το μηδεν, δηλαδή η name2 είναι μεγαλύτερη ή ίση με την name1 τότε αυτή αντιγράφεται στη mixed. Η τελευταία συνάρτηση που παρουσιάζεται στο πρόγραμμα είναι αυτή που συνενώνει δύο συμβολοσειρές s1 και s2 θέτοντας την s2 τέλος της s1 και το όλο αποτέλεσμα τοποθετείται στην s1. Η λειτουργία αυτή μπορεί να εκφραστεί ως for(length1 = 0; (s1[length1]); length1++); for(i = 0; (s1[length1+i] = s2[i]); i++); όπου length1 είναι το μήκος της συμβολοσειράς s1. και υπολογίζεται στη πρώτη επανάληψη. 'Eτσι η name1 αρχικά αντιγράφεται στη mixed, μετά προστίθενται μερικά κενά και τελικά προστίθεται και η name2, το δε αποτέλεσμα εκτυπώνεται. Η βιβλιοθήκη συναρτήσεων της C γιά διαχείριση συμβολοσειρών περιέχει πολλές χρήσιμες συναρτήσεις οι οποίες μπορούν να χρησιμοποιηθούν σαν βάση γιά πιό σύνθετες συναρτήσεις. Ο αναγνώστης προτρέπεται να μελετήσει προσεκτικά αυτή τη βιβλιοθήκη. |
![]() |
![]() |
![]() |