Συμβολοσειρά

**Συμβολοσειρά**, (***string***), στην επιστήμη υπολογιστών καλούμε μια σειρά διαδοχικών συμβόλων τα οποία σύμβολα είναι στοιχεία ενός πεπερασμένου σύνολου ή αλλιώς** [[αλφάβητο (μαθηματικά)|αλφάβητου]]**. Ανάλογα με τα στοιχεία που διαθέτει το αλφάβητο, διαφοροποιείται και το περιεχόμενο της συμβολοσειράς. 

Στην περίπτωση που το αλφάβητο περιορίζεται σε γράμματα και αριθμούς, η συμβολοσειρά λέγεται και **αλφαριθμητικό**.

Στον προγραμματισμό υπολογιστών , συνήθως με τον όρο συμβολοσειρά αναφερόμαστε σε έναν τύπο δεδομένων με τον οποίο ορίζονται ακολουθίες χαρακτήρων. Οι χαρακτήρες παριστάνονται με μια συγκεκριμένη κωδικοποίηση χαρακτήρων. 

## Τυπικές Γλώσσες
### Μήκος συμβολοσειράς
### Πράξεις συμβολοσειρών
#### Συνένωση (ή παράθεση)
Έστω μια συμβολοσειρά u και μια συμβολοσειρά v ενός αλφαβήτου Σ. Η συνένωση (concatenation) της u με τη v συμβολίζεται uv και είναι μια καινούργια συμβολοσειρά που προκύπτει από τη u ακολουθούμενη από τη v. Για παράδειγμα:

Έστω  u = a_1 a_2 a_3 \dots a_i  και
έστω  v = b_1 b_2 b_3 \dots b_j ,

τότε  uv = a_1 a_2 a_3 \dots a_i b_1 b_2 b_3 \dots b_j .

Για κάθε συμβολοσειρά w ισχύει wε = εw = w, όπου ε η κενή συμβολοσειρά.

#### Αναστροφή

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

Οι *χαρακτήρες* είναι *γράμματα* (όπως a b c α β γ ...), *αριθμοί* (όπως 0 1 2 3 ...), *τελεστές πράξεων* (όπως * + / - ...), *σημεία στίξης* (όπως κόμμα, δίστιγμο, παρένθεση, ...), *σύμβολα σχεδίασης* (όπως ╚ ╤ ╧ ...), *σύμβολα ελέγχου* (όπως ESCape, LineFeed, ACKnowledgement, CarriageReturn, ...), οι οποίοι ανήκουν σε κάποιον προκαθορισμένο κώδικα (όπως ASCII, Ebcdic, Fieldata, Unicode, ISO 8859, UTF-16, κλπ). 

Ανάλογα με την γλώσσα προγραμματισμού κάποιοι χαρακτήρες μπορεί να έχουν ειδικό ρόλο, οπότε περιορίζεται η χρήση τους. Μερικοί χαρακτήρες είναι εκτυπώσιμοι και μερικοί δεν είναι. 

Για παράδειγμα, αν υποθέσουμε ότι το αλφάβητο της σειράς χαρακτήρων είναι το ελληνικό, τότε τα παρακάτω είναι αποδεκτές σειρές χαρακτήρων:

αβγ
ααββγγ
αυτοειναισειραχαρακτηρων

Οι σειρές χαρακτήρων στις γλώσσες προγραμματισμού συνήθως περικλείονται με διπλά ή μονά *εισαγωγικά* (αγγλ. *quote*) :
 "αυτή η σειρά χαρακτήρων έχει διπλά εισαγωγικά στα άκρα της"
 'βάζοντας στα άκρα μονά εισαγωγικά, περικλείουμε το διπλό " χωρίς πρόβλημα'

Υπάρχουν γλώσσες προγραμματισμού που αντιμετωπίζουν *όλα* τα προς επεξεργασία στοιχεία τους, (αριθμούς, ημερομηνίες, κείμενα προγραμμάτων, κλπ.), ως σειρές χαρακτήρων, όπως υπάρχουν και λειτουργικά συστήματα που αντιμετωπίζουν τα πάντα (συσκευές, αρχεία, διεργασίες, εντολές) ως στοιχειοσειρές.

### Εσωτερική παράσταση σειράς χαρακτήρων
Οι σειρές χαρακτήρων στις διάφορες γλώσσες είχαν διάφορους τρόπους αποθήκευσης στην μνήμη του υπολογιστή.
* 1ος τρόπος : {μήκος, σειρά χαρακτήρων}. Στην Pascal αποθηκευόταν πρώτα το πλήθος των χαρακτήρων, ακολουθούμενο από τους χαρακτήρες. Αυτή την μορφή είχε και η σειρά χαρακτήρων στην FORTRAN, π.χ. **''19H**Τελικά Αποτελέσματα*.
* 2ος τρόπος : {σειρά χαρακτήρων, διαχωριστής}. Ο *'διαχωριστής**, (αγγλ. ''delimiter''), είναι ειδικός χαρακτήρας που δεν επιτρέπεται να είναι μέρος της σειράς χαρακτήρων. Συνηθισμένος (από την γλώσσα [[C]]) διαχωριστής ήταν ο χαρακτήρας NUL (000 στον κώδικα Ascii). Στην γλώσσα Pick-Basic ήταν το 254 στον κώδικα Ascii. Η μεταβλητή που περιέχει την σειρά χαρακτήρων έχει μια διεύθυνση στην μνήμη : από αυτή την διεύθυνση αρχίζει η αποθήκευση της σειράς χαρακτήρων και τελειώνει εκεί που βρίσκεται ο διαχωριστής.
* 3ος τρόπος : {διεύθυνση, μήκος}. Η σειρά χαρακτήρων ορίζεται με την διεύθυνση και το μήκος της σε χαρακτήρες. Αυτός ο τρόπος διευκολύνει κάποιους χειρισμούς, σε σύγκριση με άλλους τρόπους αποθήκευσης.
* Άλλοι τρόποι : Για εξοικονόμηση χώρου τα κοινά μέρη των στοιχειοσειρών τοποθετούνται σε κοινόχρηστη περιοχή.

== Στοιχειοσειρές σε τυπικές γλώσσες ==
Όπως αναφέρεται αναλυτικά στο λήμμα [[Τυπική γραμματική]], το είδος των τερματικών στοιχείων που περιέχει το αλφάβητο, και οι κανόνες σχηματισμού που δίνονται, καθορίζουν την μορφή και το περιεχόμενο κάθε **συμβολοσειράς** που θα ανήκει στην [[Τυπική γλώσσα]]. (Παραδείγματα υπάρχουν στα αναφερθέντα λήμματα, καθώς και άλλες πράξεις με στοιχειοσειρές).

== Ελληνική ορολογία ==

Για την απόδοση του όρου ''string of characters'' έχουν χρησιμοποιηθεί στο παρελθόν οι όροι ''ακολουθία χαρακτήρων'' και ''νήμα χαρακτήρων''. Ο [[Ελληνικός Οργανισμός Προτυποποίησης]] (ΕΛΟΤ) έχει καθορίσει την παρακάτω ορολογία:



== Πακέτα πληροφοριών ==
Ένα **πακέτο πληροφορίας** είναι μια στοιχειοσειρά που διακινείται σε συστήματα επικοινωνιών μεταξύ υπολογιστών. Οι κώδικες χαρακτήρων (όπως ο Ascii) περιέχουν ειδικούς **χαρακτήρες ελέγχου** του σχηματισμού και της διακίνησης των πακέτων πληρoφοριών. Για παράδειγμα, ένα πακέτο πληροφορίας μπορεί να έχει την μορφή :
: **συγχρονισμός**, **επικεφαλίδα** ΑΑΑΑΑ, **κείμενο** ΒΒΒΒΒ, **επαληθευτικά** CCCCC, **τέλος μηνύματος**, **τέλος μετάδοσης**
: SYN SYN SYN SYN SOH AAAAA STX BBBBB ETX CCCCC ETB EOT

Μια άλλη μέθοδος αποστολής μηνύματος είναι να προηγείται σε μια ακολουθία κανονικών χαρακτήρων ένας **χαρακτήρας διαφυγής*', (αγγλ. *escape sequence''), για να σχηματιστεί η εντολή επικοινωνίας. Αυτός ο τρόπος χρησιμοποιήθηκε πολύ στην επικοινωνία λογισμικού με εκτυπωτές και άλλα περιφερειακά.


Κατηγορία:Κωδικοποίηση χαρακτήρων
Κατηγορία:Τυπικές γλώσσες
Κατηγορία:Δομές δεδομένων
Κατηγορία:Επιστήμη υπολογιστών