====== Η κλάση std::string ======
Η //standard// βιβλιοθήκη της C++ διαθέτει την κλάση [[http://www.cplusplus.com/reference/string/string/|std::string]]. Οποιοδήποτε αντικείμενο της κλάσης αυτής μπορείτε να το αντιμετωπίζετε σαν ένα δυναμικά μεταβαλλόμενο πίνακα από χαρακτήρες. Η κλάση //string// έχει το πλεονέκτημα ότι δεν χρειάζεται να σας απασχολεί η δέσμευση της απαραίτητης μνήμης για την αποθήκευση των αλφαριθμητικών.
Δείτε το παρακάτω παράδειγμα χρήσης της κλάσης //string//:
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 |
Παράδειγμα χρήσης κατασκευαστών
#include
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
#include
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
#include
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//. |
#include
#include
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;
}
#include
#include
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;
}
#include
#include
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;
}
==== Σύγκριση, αναζήτηση, εξαγωγή υπο-αλφαριθμητικών ====
| const char* c_str() const;
| Επιστρέφει ένα //C-string// από ένα αντικείμενο της κλάσης //string//. |
| const char* data() const;
| Ανάλογη με την //c_str()// με την διαφορά ότι η σειρά χαρακτήρων που προκύπτει δεν τερματίζεται με τον χαρακτήρα '\0'. |
| size_t copy (char* s, size_t len, size_t pos = 0) const;
| Αντιγράφει ένα υπο-//string// του τρέχοντος //string// στον πίνακα που δείχνει ο δείκτης //s//. |
| size_t find (const string& str, size_t pos = 0) const;
size_t find (const char* str, size_t pos = 0) const;
size_t find (const char* str, size_t pos, size_t n) const;
size_t find (char c, size_t pos = 0) const;
| Αναζητά στο //string// την πρώτη εμφάνιση του //string str// ή του χαρακτήρα //c// ξεκινώντας την αναζήτηση από την θέση pos. |
| size_t rfind (const string& str, size_t pos = npos) const;
size_t rfind (const char* str, size_t pos = npos) const;
size_t rfind (const char* str, size_t pos, size_t n) const;
size_t rfind (char c, size_t pos = npos) const;
| Αναζητά στο //string// την τελευταία εμφάνιση του //string str// ή του χαρακτήρα //c// ξεκινώντας την αναζήτηση από την θέση //pos// και αγνοώντας όλους του χαρακτήρες που βρίσκονται μετά τη θέση //pos//. |
| string substr (size_t pos = 0, size_t len = npos) const;
| Επιστρέφει ένα νέο αντικείμενο το οποίο αποτελεί υπο-//string// του τρέχοντος αντικειμένου, ξεκινώντας από την θέση pos και με μήκος len. |
| int compare (const string& str) const;
int compare (size_t pos, size_t len, const string& str) const;
int compare (const char* str) const;
int compare (size_t pos, size_t len, const char* str) const;
| Συγκρίνει το τρέχον string με το δοθέν //string// ή με το υπο-//string// που ξεκινάει από την θέση //pos// του //str// και έχει μήκος //len//. |
#include
#include
#include
using namespace std;
int main () {
string str ("Split this sentence to word tokens");
char * cstr = new char [str.length()+1];
strcpy (cstr, str.c_str());
char * p = strtok (cstr," ");
while (p!=0) {
cout << p << '\n';
p = strtok(NULL," ");
}
delete[] cstr;
}