Συμβολοσειρά (String)
Μία συμβολοσειρά είναι μία πεπερασμένη συλλογή χαρακτήρων με γραμμική διάταξη.
Ως πεδίο τιμών μπορούμε να ορίσουμε κάθε συνδυασμό χαρακτήρων που δεν ξεπερνά ένα μέγιστο μήκος.
Μερικές από τις πράξεις που μπορούμε να ορίσουμε είναι:
- create (Δημιουργία)
- getLength (Μήκος συμβολοσειράς)
- isFull (Έλεγχος αν είναι πλήρης)
- isEmpty (Έλεγχος αν είναι κενή)
- getCharAt (Επιστροφή χαρακτήρα)
- addChar (Πρόσθεση χαρακτήρα)
- deleteChar (Διαγραφή χαρακτήρα)
- search (Αναζήτηση)
Παράδειγμα
Υλοποίηση με πίνακα
#include <stdio.h> #define MAX 100 typedef struct { int length; char text[MAX]; }String; /* Δημιουργεί μια κενή συμβολοσειρά */ void create(String *p) { p->length = 0; } /* Επιστρέφει το πλήθος των χαρακτήρων της συμβολοσειράς */ int getLength(String p) { return p.length; } /* Ελέγχει αν η συμβολοσειρά είναι πλήρης */ int isFull(String p) { if(getLength(p) == MAX) { return 1; } else { return 0; } } /* Ελέγχει αν η συμβολοσειρά είναι κενή */ int isEmpty(String p) { if(getLength(p) == 0) { return 1; } else { return 0; } } /* Επιστρέφει το χαρακτήρα της i θέσης ή αλλιώς -1 */ char getCharAt(String p, unsigned int i) { if(i < getLength(p)) { return p.text[i]; } else { printf("oops, error"); return -1; } } /* Προσθέτει χαρακτήρα στο τέλος της συμβολοσειράς */ int addChar(String *p, char x) { if(isFull(*p)) { printf("oops, error"); return -1; } else { p->text[p->length] = x; p->length++; } } /* Αφαιρεί χαρακτήρα από το τέλος της συμβολοσειράς και τον επιστρέφει */ char deleteChar(String *p) { if(isEmpty(*p)) { printf("oops, error"); return -1; } else { p->length--; return p->text[p->length]; } } /* Εκτύπωση συμβολοσειράς */ void printData(String p) { int i; for(i = 0; i< getLength(p); i++) { printf("%c", p.text[i]); } } int main(){ String s; create(&s); addChar(&s, 'A'); addChar(&s, 'B'); addChar(&s, 'C'); printData(s); /* ABC */ printf("length: \n%d\n", getLength(s)); /* 3 */ printf("%c\n", deleteChar(&s)); /* C */ printf("%c\n", deleteChar(&s)); /* B */ printf("%c\n", deleteChar(&s)); /* A */ printData(s); /* */ printf("length: \n%d\n", getLength(s)); /* 0 */ getchar(); return 0; }