**Συμβολοσειρά**, (***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* έχουν χρησιμοποιηθεί στο παρελθόν οι όροι *ακολουθία χαρακτήρων* και *νήμα χαρακτήρων*. Ο Ελληνικός Οργανισμός Προτυποποίησης (ΕΛΟΤ) έχει καθορίσει την παρακάτω ορολογία:

| Αγγλικός όρος | Ελληνικός όρος | Γαλλικός όρος |
| --- | --- | --- |
| 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*), για να σχηματιστεί η εντολή επικοινωνίας. Αυτός ο τρόπος χρησιμοποιήθηκε πολύ στην επικοινωνία λογισμικού με εκτυπωτές και άλλα περιφερειακά.

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| π • σ • ε
Τύποι δεδομένων |
| --- |
|  |
| Χωρίς ερμηνεία | 
Bit · Byte · Trit · Tryte · Λέξη |
|  |
| Αριθμητικοί | 
Ακέραιος · Σταθερής υποδιαστολής · Κινητής υποδιαστολής · Πραγματικός · Μιγαδικός · Bignum · Διάστημα |
|  |
| Κείμενο | 
Χαρακτήρας · Συμβολοσειρά |
|  |
| Δείκτες | 
Διεύθυνση · Αναφορά · Δείκτης συνάρτησης |
|  |
| Σύνθετοι | 
Αλγεβρικός τύπος δεδομένων (γενικευμένος) · Πίνακας · Πίνακας αντιστοίχισης · Κλάση · Λίστα · Αντικείμενο · Τύπος επιλογής · Γινόμενο · Εγγραφή · Σύνολο · Ένωση (με ετικέτες) |
|  |
| Άλλοι | 
Αλήθειας · Bottom type · Συλλογή · Τύπος απαρίθμησης · Εξαίρεση · Τύπος συνάρτησης · Αδιαφανής τύπος δεδομένων · Αναδρομικός τύπος δεδομένων · Σημαφόρος · Stream · Top type · Κλάση τύπου · Unit type · Void |
|  |
| Σχετικά θέματα | 
Αφηρημένος τύπος δεδομένων · Δομή δεδομένων · Interface · Kind · Πρωτογενής τύπος δεδομένων · Υποτύποι · Template · Κατασκευαστής τύπων · Παραμετρικός πολυμορφισμός · Πολυμορφισμός υποτύπων |

 |