Γ7.2 Συμβολοσειρές (Strings) Γ Λυκείου Κατεύθυνσης
Εισαγωγή Στη C++ υπάρχει η δυνατότητα να δηλώσουμε μία συμβολοσειρά ως αντικείμενο, χρησιμοποιώντας τη βιβλιοθήκη <string>. Επειδή οι συμβολοσειρές είναι αντικείμενα και όχι τύποι δεδομένων, συνεπάγεται ότι θα έχουν ιδιότητες και έτοιμες συναρτήσεις. Μετά τη δήλωση ενός αντικειμένου τύπου string, μπορούμε να το χειριστούμε ως πίνακα χαρακτήρων.
Δήλωση και χρήση συμβολοσειράς Η δήλωση μίας συμβολοσειράς γίνεται με τον ίδιο τρόπο που δηλώνουμε μεταβλητές, χρησιμοποιώντας το αναγνωριστικό string. Απαραίτητη προϋπόθεση είναι η δήλωση της βιβλιοθήκης <string>. #include<iostream> #include<string> using namespace std; int main(){ string onoma; cout << "What is your name?"<<endl; cin >> onoma; cout << "Hello " << onoma; return 0; }
Δήλωση και χρήση συμβολοσειράς Να σημειωθεί ότι τα strings δηλώνονται με διπλά εισαγωγικά ("), σε αντίθεση με τις μεταβλητές τύπου char που δηλώνονται με μονά εισαγωγικά ('). #include<iostream> #include<string> using namespace std; int main(){ string school = "Palouriotissa"; char letter = 'G'; cout << letter << " " << school; return 0; }
Παράδειγμα 2.1 Να δημιουργήσετε πρόγραμμα το οποίο να δέχεται το όνομα ενός χρώματος και να τυπώνει τη λέξη «Primary», σε περίπτωση που το χρώμα είναι κόκκινο, κίτρινο ή μπλε, διαφορετικά να τυπώνει «Not Primary». Λύση: https://ideone.com/s9fztb
Συμβολοσειρές - Πίνακες Χαρακτήρων Μία συμβολοσειρά είναι ουσιαστικά ένας πίνακας από χαρακτήρες και μπορούμε να έχουμε πρόσβαση σε οποιοδήποτε στοιχείο της, αναφέροντας τη θέση του. Ο πρώτος χαρακτήρας της συμβολοσειράς βρίσκεται στη θέση 0. Το παρακάτω πρόγραμμα τυπώνει τους 2 πρώτους χαρακτήρες της συμβολοσειράς test η οποία έχει αρχικοποιηθεί με τη λέξη «hello». https://ideone.com/grr6pj
Παράδειγμα 2.2 Να δημιουργήσετε πρόγραμμα το οποίο να δέχεται 2 συμβολοσειρές και να τυπώνει τον αριθμό 1, αν ξεκινούν με τον ίδιο χαρακτήρα, διαφορετικά να τυπώνει τον αριθμό 0. Λύση: https://ideone.com/7pj77t
Συναρτήσεις της βιβλιοθήκης string Για τις ανάγκες τους μαθήματος, θα χρησιμοποιήσουμε τις εξής συναρτήσεις της βιβλιοθήκης <string>: size() - επιστρέφει το μέγεθος της συμβολοσειράς clear() - διαγράφει το περιεχόμενο μίας συμβολοσειράς empty() - ελέγχει αν η συμβολοσειρά είναι άδεια getline() - διαβάζει ολόκληρη τη γραμμή
Παράδειγμα 2.3 - size() Να δημιουργήσετε πρόγραμμα το οποίο να δέχεται μία συμβολοσειρά και να τυπώνει το κάθε γράμμα της σε διαφορετική γραμμή. Λύση: https://ideone.com/brnbhb
Παράδειγμα 2.5 Δίνεται μία συμβολοσειρά που περιέχει πεζούς και κεφαλαίους χαρακτήρες του λατινικού αλφαβήτου. Να δημιουργήσετε πρόγραμμα το οποίο να δέχεται τη συμβολοσειρά και να δημιουργεί μία νέα συμβολοσειρά που να περιέχει μόνο τα κεφαλαία γράμματα της συμβολοσειράς που δόθηκε. Σε περίπτωση που δεν βρεθούν κεφαλαία γράμματα, να τυπώνεται το μήνυμα «No capital letters found». Σημείωση: Ο κώδικας ASCII των κεφαλαίων λατινικών γραμμάτων ξεκινά από το 65 (Α) μέχρι και το 90 (Z). Λύση: https://ideone.com/hkzoco
getline() Η συνάρτηση getline διαβάζει μία συμβολοσειρά μέχρι να συναντήσει αλλαγή γραμμής. Η συνάρτηση δέχεται 2 παραμέτρους. Η πρώτη παράμετρος αφορά στην μέθοδο εισαγωγής της συμβολοσειράς και η δεύτερη παράμετρος αφορά στο αντικείμενο όπου θα αποθηκευτεί η συμβολοσειρά. string st1; cin >> st1; cout << st1 << endl; string st2; getline(cin,st2); cout << st2; // Input: Hello world // Output: Hello // Input: Hello world // Output: Hello world
getline() Να δημιουργήσετε πρόγραμμα το οποίο να διαβάζει από το πληκτρολόγιο το ονοματεπώνυμο ενός μαθητή / μίας μαθήτριας και να το αποθηκεύει στη μεταβλητή τύπου συμβολοσειράς (string) με αναγνωριστικό student_name. Στη συνέχεια να το εμφανίζει στην οθόνη με τους χαρακτήρες αντεστραμμένους. Παράδειγμα εισόδου Hans Christian Andersen Παράδειγμα εξόδου nesredna naitsirhc snah Λύση: https://ideone.com/eeuqu6
Πίνακες συμβολοσειρών Μπορούμε να δηλώσουμε πίνακες με συμβολοσειρές με τον ίδιο τρόπο που θα δηλώναμε έναν πίνακα ακεραίων. Για παράδειγμα, η δήλωση: string st[10]; δημιουργεί έναν πίνακα με 10 συμβολοσειρές. Αν θέλουμε να τυπώσουμε τον 2ο χαρακτήρα της 3ης συμβολοσειράς του πίνακα, θα πρέπει να χρησιμοποιήσουμε την εντολή: cout << st[2][1]; όπου ο δείκτης [2] δείχνει τη συμβολοσειρά και ο δείκτης [1] τον χαρακτήρα.
Πίνακες συμβολοσειρών FqqDu4 i3vsffiqe WUWTDYGRSagyhGa WrLwHxyPDwfr CfmHtUhsdf QM7Xa4x78 rpejsvcccaasw NfX981gpAVfgyjuhwe ClF9DQyQKvty hkeobqsuqlrefgt cout << st[3][4]; // H cout << st[8][2]; // F cout << st[0][5]; // 4 for (int i=0; i<10; i++) cout << st[i][st[i].size()-1];
Παράδειγμα 2.5 Να δημιουργήσετε πρόγραμμα το οποίο να δέχεται 5 συμβολοσειρές και να τις αποθηκεύει στον πίνακα Α. Στη συνέχεια, να δημιουργεί και να εμφανίζει μία συμβολοσειρά που να περιέχει τον πρώτο χαρακτήρα από την κάθε συμβολοσειρά. Λύση: https://ideone.com/yn8gxm