cpp:strings
This is an old revision of the document!
Table of Contents
Αλφαριθμητικά
Τα αλφαριθμητικά μπορούν να αναπαρασταθούν με δύο τρόπους
- Μέσω μιας ακολουθίας χαρακτήρων που περιέχει το χαρακτήρα '\0' στο τέλος.
- Μέσω της κλάσης string.
Aκολουθία χαρακτήρων που περιέχει το χαρακτήρα '\0' στο τέλος
char str[12] = "Hello";
ή
char str[12] = { 'H', 'e', 'l', 'l', 'o', '\0' };
Στη C++ είναι διαθέσιμες οι συναρτήσεις διαχείρισης συμβολοσειρών που προέρχονται από τη C, όπως οι παρακάτω:
char *strcpy(char *dest, const char *src); | Αντιγράφει το src στο dest . Τα αλφαριθμητικά δεν πρέπει να επικαλύπτονται μεταξύ τους και θα πρέπει να υπάρχει αρκετός διαθέσιμος χώρος στο dest ώστε να αντιγραφεί το src χωρίς να βγούμε εκτός ορίων. |
char *strcat(char *dest, const char *src); | Ενθέτει το src αμέσως μετά το dest . Αποθηκεύει το αποτέλεσμα στο dest . Τα αλφαριθμητικά δεν πρέπει να επικαλύπτονται μεταξύ τους και θα πρέπει να υπάρχει αρκετός διαθέσιμος χώρος στο dest για το προκύπτον αλφαριθμητικό. |
int strcmp(const char *s1, const char *s2); | Συγκρίνει τα s1 και s2 μεταξύ τους και επιστρέφει μικρότερο, μεγαλύτερο ή ίσο με το μηδέν εάν το s1 είναι μικρότερο μεγαλύτερο ή ίσο με το s2 . |
size_t strlen(const char *s); | Επιστρέφει τον αριθμό των χαρακτήρων (μήκος) του αλφαριθμητικού. |
char *strchr(const char *str, int c); | Επιστρέφει ένα δείκτη στην πρώτη εμφάνιση του c στο str . Eπιστρέφει NULL εάν δεν εμφανίζεται το c στο str . |
char *strrchr(const char *str, int c); | Επιστρέφει ένα δείκτη στην τελευταία εμφάνιση του c στο str . Eπιστρέφει NULL εάν δεν εμφανίζεται το c στο str . |
char *strstr(const char *haystack, const char *needle); | Επιστρέφει ένα δείκτη στην πρώτη εμφάνιση του needle στο heystack . Eπιστρέφει NULL εάν δεν εμφανίζεται το needle στο heystack . |
char *strstr(const char *haystack, const char *needle); | Επιστρέφει ένα δείκτη στην τελευταία εμφάνιση του needle στο heystack . Επιστρέφει NULL εάν δεν εμφανίζεται το needle στο heystack . |
Η κλάση String
Η standard βιβλιοθήκη της C++ διαθέτει την κλάση string η οποία έχει το πλεονέκτημα ότι δεν χρειάζεται να σας απασχολεί η δέσμευση της απαραίτητης μνήμης για την αποθήκευση των αλφαριθμητικών.
Δείτε το παρακάτω παράδειγμα χρήσης της κλάσης string:
- string.cpp
int main(int argc, char *argv[]) { string str = "Hello World!"; cout << str << endl; str.append(" How are you?"); cout << str << endl; str = "Hello Wordl!"; str += " How are you?"; cout << str << endl; }
Οι βασικές μέθοδοι της κλάσης string είναι οι εξής:
Κατασκευαστές
string(); | default constructor |
string (const string& str); | copy constructor |
string (const string& str, size_t pos, size_t len = npos); | substring constructor |
string (const char* s); | from c-string constructor |
string (const char* s, size_t n); | from c-string sequence |
string (size_t n, char c); | fill with c |
Παράδειγμα χρήσης κατασκευαστών
- strings_constructor.cpp
#include <iostream> using namespace std; int main() { string str = "Hello World!"; string copy(str); string substring(str, 0, 5); const char *p = str.c_str(); string fromCString(p); string fromCSequence(p, 8); string fillwithDollars(5, '$'); cout << str << endl; cout << copy << endl; cout << substring << endl; cout << p << endl; cout << fromCString << endl; cout << fromCSequence << endl; cout << fillwithDollars << endl; }
Μέθοδοι
Χωρητικότητα και μέγεθος αλφαριθμητικού
size_t size() const; | Επιστρέφει το μέγεθος του string |
size_t length() const; | Μέθοδος ανάλογη της μεθόδου size |
size_t capacity() const; | Χωρητικότητα του αλφαριθμητικού (σε bytes) |
void resize (size_t n); και void resize (size_t n, char c); | Επεκτείνεται το αλφαριθμητικό ώστε να έχει νέο μέγεθος n . |
void reserve (size_t n = 0); | Μεταβάλλει τη χωρητικότητα του αλφαριθμητικού. |
void clear(); | Διαγράφει τα περιεχόμενα του αλφαριθμητικού |
bool empty() const; | Επιστρέφει true εάν το αλφαριθμητικό είναι άδειο. |
Πρόσβαση σε χαρακτήρες του αλφαριθμητικού
char& operator[] (size_t pos); const char& operator[] (size_t pos) const; | Επιστρέφει μία αναφορά στη θέση pos του string. |
char& at (size_t pos); const char& at (size_t pos) const; | Επιστρέφει μία αναφορά στη θέση pos του string. Πετάει out_of_range exception εάν δοθεί τιμή εκτός των ορίων του πίνακα. |
char& back(); const char& back() const; | Επιστρέφει μία αναφορά στον τελευταίο χαρακτήρα του string. |
char& front(); const char& front() const; | Επιστρέφει μία αναφορά στον πρώτο χαρακτήρα του string. |
Στις όλες παραπάνω περιπτώσεις εάν το string είναι const επιστρατεύεται η const έκδοση της συνάρτησης.
Διάτρεξη
iterator begin(); const_iterator begin() const; | Επιστρέφει έναν iterator που δείχνει στον πρώτο χαρακτήρα του string. |
iterator end(); const_iterator end() const; | Επιστρέφει έναν iterator που δείχνει μετά τον τελευταίο χαρακτήρα του string. |
reverse_iterator rbegin(); const_reverse_iterator rbegin() const; | Επιστρέφει έναν reverse iterator που δείχνει στον τελευταίο χαρακτήρα του string. |
reverse_iterator rend(); const_reverse_iterator rend() const; | Επιστρέφει έναν reverse iterator που δείχνει πριν από τον πρώτο χαρακτήρα του string. |
Παράδειγμα χρήσης iterator
#include <iostream> #include <string> using namespace std; int main (){ string str = "Hello World!"; for( string::iterator it=str.begin(); it!=str.end(); ++it) cout << *it; cout << endl; }
Παράδειγμα χρήσης reverse_iterator
#include <iostream> #include <string> using namespace std; int main (){ string str = "Hello World!"; for (string::reverse_iterator rit=str.rbegin(); rit!=str.rend(); ++rit) cout << *rit; cout << endl; }
Μεταβολή του αλφαριθμητικού
string& operator+= (const string& str); string& operator+= (const char* s); string& operator+= (char c); | Επεκτείνει το αλφαριθμητικό προσθέτοντας τους επιπλέον χαρακτήρες του ορίσματος στο τέλος του. Επιστρέφει μία αναφορά στο τρέχον αντικείμενο. |
string& append (const string& str); string& append (const char* str); | Επεκτείνει το αλφαριθμητικό ενθέτοντας ένα αντίγραφο του str στο τέλος του. |
string& assign (const string& str); string& assign (const char* str) | Αντιγράφει το str στο string. |
string& insert (size_t pos, const string& str); string& insert (size_t pos, const char* str); | Ενθέτει ένα αντίγραφο του str στη θέση pos του string. |
string& erase (size_t pos = 0, size_t len = npos); iterator erase (iterator p); iterator erase (iterator first, iterator last); | Διαγράφει μέρος του string, μειώνοντας το μήκος του. |
string& replace (size_t pos, size_t len, const string& str); string& replace (size_t pos, size_t len, const char* s); string& replace (size_t pos, size_t len, const string& str, size_t subpos, size_t sublen); | Αντικαθιστά το υφιστάμενο string με το νέο str ξεκινώντας από την θέση pos του string και για μήκος len. |
void swap (string& str); | Ανταλλάσει αμοιβαία το περιεχόμενο του τρέχοντος string με το περιοχόμενο του string str. |
- append.cpp
#include <iostream> #include <string> using namespace std; int main () { string str="Hello"; string str2=" "; char[] str3="World"; string str4 = "!\n"; str+=str2; str.append(str3); str.append(str4); cout << str; }
- replace.cpp
#include <iostream> #include <string> using namespace std; int main () { string base="this is a test string."; string str2="n example"; string str3="sample phrase"; string str4="useful."; string str=base; // "this is a test string." str.replace(9,5,str2); // "this is an example string." (1) str.replace(19,6,str3,7,6); // "this is an example phrase." (2) str.replace(8,10,"just a"); // "this is just a phrase." (3) cout << str << endl; }
- chicken.cpp
#include <iostream> #include <string> using namespace std; main (){ string chicken ("chicken"); string egg ("egg"); cout << "Before the swap, chicken comes from " << chicken; cout << " and egg comes from " << egg << endl; chicken.swap (egg); cout << "After the swap, chicken comes from " << chicken; cout << " and egg comes from " << egg << endl; }
Σύγκριση, αναζήτηση, εξαγωγή υπο-αλφαριθμητικών
| |
| |
| |
| |
| |
| |
| |
| |
|
cpp/strings.1494223239.txt.gz · Last modified: 2017/05/08 05:00 (external edit)