User Tools

Site Tools


cpp:std_strings

Η κλάση std::string

Η standard βιβλιοθήκη της C++ διαθέτει την κλάση std::string. Οποιοδήποτε αντικείμενο της κλάσης αυτής μπορείτε να το αντιμετωπίζετε σαν ένα δυναμικά μεταβαλλόμενο πίνακα από χαρακτήρες. Η κλάση 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

string_fw_iterator.cpp
#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

string_rv_iterator.cpp
#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;
}

Σύγκριση, αναζήτηση, εξαγωγή υπο-αλφαριθμητικών

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.
cstring.cpp
#include <iostream>
#include <cstring>
#include <string>
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;
}
cpp/std_strings.txt · Last modified: 2023/04/25 14:46 by gthanos