Στοιχειοσειρά
Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
Η στοιχειοσειρά, (γαλλ. chaîne, αγγλ. string), ή συμβολοσειρά είναι μια ομάδα διαδοχικών στοιχείων / συμβόλων. Τα στοιχεία ανήκουν όλα σε ένα σύνολο στοιχείων, που το ονομάζουμε αλφάβητο. Ανάλογα με τα στοιχεία που διαθέτει το αλφάβητο, διαφοροποιείται και το περιεχόμενο της στοιχειοσειράς.
- Στις γλώσσες προγραμματισμού το αλφάβητο περιέχει χαρακτήρες, οι οποίοι ανήκουν σε προκαθορισμένο κώδικα (όπως Ascii, Unicode, ...), και είναι γράμματα, αριθμοί, σημεία στίξης, σύμβολα σχεδίασης, σύμβολα ελέγχου, κλπ.. Η στοιχειοσειρά αποτελείται από πεπερασμένο πλήθος διαδοχικών χαρακτήρων, λέγεται σειρά χαρακτήρων, (γαλλ. chaîne de caractères, γερμ. Zeichenkette, αγγλ. character string ή string of characters), και είναι ένα επεξεργάσιμο αντικείμενο.
- Στην περίπτωση που το αλφάβητο περιορίζεται σε γράμματα και αριθμούς, η στοιχειοσειρά λέγεται και αλφαριθμητικό.
- Στις τυπικές γλώσσες το αλφάβητο Σ είναι ένα μη κενό πεπερασμένο σύνολο στοιχείων. Με την γραμματική δημιουργούμε από το αλφάβητο στοιχειοσειρές, πιθανώς άπειρες στο πλήθος.
- Στις φυσικές γλώσσες οι στοιχειοσειρές ονομάζονται λέξεις, (αγγλ. word), και οι λέξεις συντάσσονται με συγκεκριμένους κανόνες για να σχηματίσουν φράσεις, (αγγλ. sentence).
- Αν οι χαρακτήρες του αλφάβητου είναι σύμβολα, τότε οι στοιχειοσειρές λέγονται ειδικότερα συμβολοσειρές (αγγλ. symbol strings).
Πίνακας περιεχομένων |
[Επεξεργασία] Σειρές χαρακτήρων σε γλώσσες προγραμματισμού
Οι γλώσσες προγραμματισμού επιτρέπουν τον ορισμό και την διαχείριση σειρών χαρακτήρων. Οι χαρακτήρες, που επιτρέπεται να περιλαμβάνονται σε σειρές χαρακτήρων, διαφέρουν σε κάθε γλώσσα.
Οι χαρακτήρες είναι γράμματα (όπως a b c α β γ ...), αριθμοί (όπως 0 1 2 3 ...), τελεστές πράξεων (όπως * + / - ...), σημεία στίξης (όπως κόμμα, δίστιγμο, παρένθεση, ...), σύμβολα σχεδίασης (όπως ╚ ╤ ╧ ...), σύμβολα ελέγχου (όπως ESCape, LineFeed, ACKnowledgement, CarriageReturn, ...), οι οποίοι ανήκουν σε κάποιον προκαθορισμένο κώδικα (όπως ASCII, Ebcdic, Fieldata, Unicode, ISO 8859, UTF-16, κλπ).
Ανάλογα με την γλώσσα προγραμματισμού, μπορεί να απαγορεύονται κάποιοι από τους χαρακτήρες του κώδικα. (Κάποιοι χαρακτήρες μπορεί να έχουν ειδικό ρόλο, οπότε δεν μπορούν να χρησιμοποιηθούν οπουδήποτε). Το κενό διάστημα, τα αριθμητικά ψηφία και τα σημεία στίξης συνήθως επιτρέπονται. Μερικοί χαρακτήρες είναι εκτυπώσιμοι και μερικοί δεν είναι.
Για παράδειγμα, αν υποθέσουμε ότι το αλφάβητο της σειράς χαρακτήρων είναι το ελληνικό, τότε τα παρακάτω είναι αποδεκτές σειρές χαρακτήρων:
αβγ
ααββγγ
αυτοειναισειραχαρακτηρων
Οι σειρές χαρακτήρων στις γλώσσες προγραμματισμού συνήθως περικλείονται με διπλά ή μονά εισαγωγικά (αγγλ. quote) :
"αυτή η σειρά χαρακτήρων έχει διπλά εισαγωγικά στα άκρα της" 'βάζοντας στα άκρα μονά εισαγωγικά, περικλείουμε το διπλό " χωρίς πρόβλημα'
Οι σειρές χαρακτήρων μπορούν να δοθούν ως τιμή σε ειδικές μεταβλητές χαρακτήρων. Στις διάφορες γλώσσες προγραμματισμού αυτές οι μεταβλητές χαρακτήρων δηλώνονται με ποικίλους τρόπους :
- στην γλώσσα FORTRAN η μεταβλητή χαρακτήρων ABC ορίζεται με την δηλωτική εντολή : CHARACTER ABC.
- στην γλώσσα COBOL καθορίζεται στην DATA DIVISION αν θα είναι το πεδίο ABC τύπου Alphabetic (PIC AAA) ή Alphanumeric (PIC XXX).
- στην γλώσσα PICK BASIC ο χρησιμοποιούμενος τελεστής καθορίζει αν το αποτέλεσμα θα είναι αριθμός ή σειρά χαρακτήρων (ορίζεται ως literal)). Αν A=111 και Β=222, τότε το (Α + Β) δίνει άθροισμα 333, ενώ το (Α & Β) δίνει την σειρά χαρακτήρων 111222.
- στην γλώσσα ΓΛΩΣΣΑ, που διδάσκεται στα δευτεροβάθμια σχολεία μας, υπάρχει η δηλωτική εντολή ΧΑΡΑΚΤΗΡΕΣ για να ορίζονται οι μεταβλητές χαρακτήρων.
- στην γλώσσα Microsoft Visual Basic η μεταβλητή χαρακτήρων strABC ορίζεται με την δηλωτική εντολή: Dim strABC As String.
Υπάρχουν γλώσσες προγραμματισμού που αντιμετωπίζουν όλα τα προς επεξεργασία στοιχεία τους, (αριθμούς, ημερομηνίες, κείμενα προγραμμάτων, κλπ.), ως σειρές χαρακτήρων, όπως υπάρχουν και λειτουργικά συστήματα που αντιμετωπίζουν τα πάντα (συσκευές, αρχεία, διεργασίες, εντολές) ως στοιχειοσειρές.
[Επεξεργασία] Εσωτερική παράσταση σειράς χαρακτήρων
Οι σειρές χαρακτήρων στις διάφορες γλώσσες είχαν διάφορους τρόπους αποθήκευσης στην μνήμη του υπολογιστή.
- 1ος τρόπος : {μήκος, σειρά χαρακτήρων}. Στην Pascal αποθηκευόταν πρώτα το πλήθος των χαρακτήρων, ακολουθούμενο από τους χαρακτήρες. Αυτή την μορφή είχε και η σειρά χαρακτήρων στην FORTRAN, π.χ. 19HΤελικά Αποτελέσματα.
- 2ος τρόπος : {σειρά χαρακτήρων, διαχωριστής}. Ο διαχωριστής, (αγγλ. delimiter), είναι ειδικός χαρακτήρας που δεν επιτρέπεται να είναι μέρος της σειράς χαρακτήρων. Συνηθισμένος (από την γλώσσα C) διαχωριστής ήταν ο χαρακτήρας NUL (000 στον κώδικα Ascii). Στην γλώσσα Pick-Basic ήταν το 254 στον κώδικα Ascii. Η μεταβλητή που περιέχει την σειρά χαρακτήρων έχει μια διεύθυνση στην μνήμη : από αυτή την διεύθυνση αρχίζει η αποθήκευση της σειράς χαρακτήρων και τελειώνει εκεί που βρίσκεται ο διαχωριστής.
- 3ος τρόπος : {διεύθυνση, μήκος}. Η σειρά χαρακτήρων ορίζεται με την διεύθυνση και το μήκος της σε χαρακτήρες. Αυτός ο τρόπος διευκολύνει κάποιους χειρισμούς, σε σύγκριση με άλλους τρόπους αποθήκευσης.
- Άλλοι τρόποι : Για εξοικονόμηση χώρου τα κοινά μέρη των στοιχειοσειρών τοποθετούνται σε κοινόχρηστη περιοχή.
[Επεξεργασία] Μήκος σειράς χαρακτήρων
Αν έχουμε αποθηκεύσει μια σειρά χαρακτήρων μέσα σε μια κατάλληλη μεταβλητή χαρακτήρων ABC, (τύπου Character ή String), τότε το μήκος της σειράς χαρακτήρων είναι το πλήθος των χαρακτήρων που απαρτίζουν το περιεχόμενο της ABC.
Οι περισσότερες γλώσσες προγραμματισμού επιτρέπουν να βρούμε το μήκος με μια συνάρτηση, όπως η LEN(ABC), που επιστρέφει έναν αριθμό ως μήκος της σειράς χαρακτήρων που περιέχεται στην ABC.
Κενή σειρά χαρακτήρων : Σε ορισμένες γλώσσες επιτρέπεται να είναι η μεταβλητή ABC χωρίς περιεχόμενο, και τότε η LEN(ABC) επιστρέφει την τιμή 0. Μπορούμε να πούμε ότι η ABC περιέχει την κενή στοιχειοσειρά, (αγγλ. null string).
Η συνάρτηση εύρεσης μήκους LEN γνωρίζει τον τρόπο που έχει αποθηκευθεί η σειρά χαρακτήρων και το επιτρεπτό αλφάβητο. Οι μη εκτυπώσιμοι χαρακτήρες συνυπολογίζονται στην εύρεση του μήκους. Παρακάτω δείχνουμε τις τιμές του μήκους που έχουν κάποιες σειρές χαρακτήρων:
- η LEN("αβγ") επιστρέφει τιμή 3
- η LEN("ααββγγ") επιστρέφει τιμή 6
- η LEN("αα ββ γγ") επιστρέφει τιμή 8 (το ένα κενό διάστημα είναι ένας χαρακτήρας)
- η LEN("") επιστρέφει τιμή 0
Οι γλώσσες προγραμματισμού έχουν ένα όριο για το μέγιστο μήκος σειράς χαρακτήρων που μπορούν να δεχθούν.
Συνήθως η γλώσσα προγραμματισμού επιτρέπει να πάρουμε ένα τμήμα σειράς χαρακτήρων, (αγγλ. substring). (Η γλώσσα Microsoft Basic είχε την σχετική εντολή MID).
- Μια σειρά χαρακτήρων Β είναι τμήμα της σειράς χαρακτήρων Δ αν υπάρχουν δυό σειρές χαρακτήρων Α και Γ τέτοιες, ώστε να ισχύει Δ = Α & Β & Γ. Η σειρά χαρακτήρων Α μπορεί να είναι κενή. Η σειρά χαρακτήρων Γ μπορεί να είναι κενή.
Η σχέση "είναι τμήμα της" ορίζει μια μη γνήσια διάταξη πάνω στο Αστέρι Κλέινι του αλφαβήτου από το οποίο σχηματίζονται οι σειρές χαρακτήρων. Η μικρότερη σειρά χαρακτήρων στην διάταξη αυτή είναι η κενή σειρά χαρακτήρων.
Αν ο συμβολισμός για το τμήμα σειράς χαρακτήρων είναι σειρά χαρακτήρων[αρχικός χαρακτήρας τμήματος : πλήθος χαρακτήρων τμήματος], τότε
- "αβγ"[1:2] είναι το τμήμα "αβ"
- "αβγ"[3:1] είναι το τμήμα "γ"
[Επεξεργασία] Πράξεις με σειρές χαρακτήρων
[Επεξεργασία] Συναλύσωση
Υπάρχει μια πράξη που γίνεται με δυό σειρές χαρακτήρων, η συναλύσωση (αγγλ. concatenation). Το σύμβολο της πράξης είναι συνήθως & (μπορεί να είναι και +). Η συναλύσωση, από τις δυό σειρές χαρακτήρων (π.χ. την strA1 = "αβγ" και την strA2 = "δ"), δημιουργεί μια νέα σειρά χαρακτήρων (την strB = strA1 & strA2 = "αβγδ"), αρχίζοντας με τα περιεχόμενα της strA1 και συνεχίζοντας την σειρά με τα περιεχόμενα της strA2, (όπως ενώνονται δυο κομμάτια αλυσίδας για να φτιάξουν ένα μακρύτερο). Η νέα σειρά χαρακτήρων strB έχει μήκος ίσο με το άθροισμα των μηκών των strA1 και strA2. Η συναλύσωση δεν είναι αντιμεταθετική πράξη, οπότε η διάταξη των σειρών χαρακτήρων επηρεάζει το αποτέλεσμα της συναλύσωσης :
- η strA2 είναι πρόθεμα:
(strA2 & strA1) δίνει "δαβγ". - η strA2 είναι επίθεμα:
(strA1 & strA2) δίνει "αβγδ". Η διαδικασία επιμήκυνσης με επίθεμα (αγγλ. append) είναι πολύ συνηθισμένη και σε αρχεία (αγγλ. file). - η strA2 είναι ένθεμα.
Χρησιμοποιώντας τμήματα σειρών χαρακτήρων, μπορούμε να ενθέσουμε την δεύτερη σειρά χαρακτήρων strA2 ανάμεσα στους χαρακτήρες της πρώτης:
(strA1[1:1] & strA2 & strA1[2:2]) δίνει "αδβγ".
(strA1[1:2] & strA2 & strA1[3:1]) δίνει "αβδγ".
[Επεξεργασία] Ταξινόμηση
Η ταξινόμηση, (αγγλ. sort), τοποθετεί τις σειρές χαρακτήρων κατά αλφαβητική σειρά περιεχομένου. Η αλφαβητική σειρά μπορεί να είναι αύξουσα (Α Β Γ ... Χ Ψ Ω) ή φθίνουσα (Ω Ψ Χ ... Γ Β Α).
Αν ο χρησιμοποιούμενος κώδικας (όπως ο Ascii) δεν έχει τα ελληνικά γράμματα με την αλφαβητική τους σειρά, πρέπει το λογισμικό να χρησιμοποιήσει ειδικούς πίνακες αντιστοίχησης (αγγλ. collating sequences) για να επιτύχει την ελληνική αλφαβητική ταξινόμηση.
Υπάρχουν κάποια υπολογιστικά συστήματα, (όπως το Microsoft Excel), που αναγνωρίζουν το περιεχόμενο των σειρών χαρακτήρων και ταξινομούν χρονικά αν οι σειρές περιέχουν ημερομηνίες, ή ταξινομούν αριθμητικά αν περιέχουν αριθμούς, αλλιώς ταξινομούν αλφαβητικά.
[Επεξεργασία] Στοιχειοσειρές σε τυπικές γλώσσες
Όπως αναφέρεται αναλυτικά στο λήμμα Τυπική γραμματική, το είδος των τερματικών στοιχείων που περιέχει το αλφάβητο, και οι κανόνες σχηματισμού που δίνονται, καθορίζουν την μορφή και το περιεχόμενο κάθε συμβολοσειράς που θα ανήκει στην Τυπική γλώσσα. (Παραδείγματα υπάρχουν στα αναφερθέντα λήμματα, καθώς και άλλες πράξεις με στοιχειοσειρές).
[Επεξεργασία] Ελληνική ορολογία
Για την απόδοση του όρου string of characters έχουν χρησιμοποιηθεί στο παρελθόν οι όροι ακολουθία χαρακτήρων και νήμα χαρακτήρων. Ο Ελληνικός Οργανισμός Προτυποποίησης (ΕΛΟΤ) έχει καθορίσει την παρακάτω ορολογία:
Ελληνικός όρος | Αγγλικός όρος | Γαλλικός όρος |
στοιχειοσειρά, σειρά οντοτήτων | string | chaîne |
στοιχειοσειρά, σειρά στοιχείων | string | chaînes |
σειρά χαρακτήρων | character string | chaîne de caractères |
σειρά χαρακτήρων | string of characters | chaîne de caractères |
αλφαβητική σειρά | alphabetic string | chaîne alphabetique |
σειρά δυαδικών ψηφίων | binary digit string | chaîne de chiffres binaires |
συμβολοσειρά | symbol string | chaîne de symboles |
μοναδιαία στοιχειοσειρά | unit string | chaîne unitaire |
κενή στοιχειοσειρά | null string | chaîne vide |
[Επεξεργασία] Πακέτα πληροφοριών
Ένα πακέτο πληροφορίας είναι μια στοιχειοσειρά που διακινείται σε συστήματα επικοινωνιών μεταξύ υπολογιστών. Οι κώδικες χαρακτήρων (όπως ο Ascii) περιέχουν ειδικούς χαρακτήρες ελέγχου του σχηματισμού και της διακίνησης των πακέτων πληρoφοριών. Για παράδειγμα, ένα πακέτο πληροφορίας μπορεί να έχει την μορφή :
- συγχρονισμός, επικεφαλίδα ΑΑΑΑΑ, κείμενο ΒΒΒΒΒ, επαληθευτικά CCCCC, τέλος μηνύματος, τέλος μετάδοσης
- SYN SYN SYN SYN SOH AAAAA STX BBBBB ETX CCCCC ETB EOT
Μια άλλη μέθοδος αποστολής μηνύματος είναι να προηγείται σε μια ακολουθία κανονικών χαρακτήρων ένας χαρακτήρας διαφυγής, (αγγλ. escape sequence), για να σχηματιστεί η εντολή επικοινωνίας. Αυτός ο τρόπος χρησιμοποιήθηκε πολύ στην επικοινωνία λογισμικού με εκτυπωτές και άλλα περιφερειακά.
[Επεξεργασία] Εξωτερικοί σύνδεσμοι
Για την συναλύσωση μπορείτε να δείτε
- την επίσημη εφημερίδα της Ευρωπαϊκής Ένωσης, όπου στον κανονισμό eurocontrol στην παράγραφο 3.5. Τελεστές υπάρχουν ορισμοί για την συναλύσωση και τα είδη της
- το λεξικό websters για την απόδοση του όρου concatenation στα ελληνικά.