logo

clasă std::string în C++

C++ are în definiția sa o modalitate de a reprezenta a succesiune de caractere ca obiect al clasei . Această clasă se numește std:: șir. Clasa șir stochează caracterele ca o secvență de octeți cu funcționalitatea de a permite acces la caracterul pe un singur octet .

Matrice șir vs caractere

Şir

Char Array



mylivecricket
Un șir este a clasa care defineste obiectele care să fie reprezentate ca un flux de personaje. O matrice de caractere este pur și simplu un matrice de caractere care poate fi terminat printr-un caracter nul.
În cazul șirurilor, memoria este alocate dinamic . Mai multă memorie poate fi alocată în timpul rulării, la cerere. Deoarece nicio memorie nu este prealocată, nicio memorie nu este irosită . Dimensiunea matricei de caractere trebuie să fie alocate static , nu poate fi alocată mai multă memorie în timpul execuției, dacă este necesar. Neutilizat alocat se irosește și memoria
Deoarece șirurile sunt reprezentate ca obiecte, fără dezintegrare a matricei apare. Este un amenintarea cu dezintegrarea matricei în cazul matricei de caractere.
Corzile sunt mai lente în comparație cu implementarea decât matricea de caractere. Implementarea a matricea de caractere este mai rapidă decât std:: șir.
Clasa String definește o serie de funcționalități care permit operații multiple pe șiruri. Matrice de caractere nu oferi mulți funcții încorporate a manipula corzile.

Operații pe șiruri

1) Funcții de intrare

Funcţie Definiție
getline() Această funcție este folosită pentru a stoca un flux de caractere introduse de utilizator în memoria obiectului.
împinge înapoi() Această funcție este folosită pentru a introduce un caracter la sfârșitul șirului.
pop_back() Introdusă din C++11 (pentru șiruri), această funcție este folosită pentru a șterge ultimul caracter din șir.

Exemplu:

CPP




// C++ Program to demonstrate the working of> // getline(), push_back() and pop_back()> #include> #include // for string class> using> namespace> std;> > // Driver Code> int> main()> {> >// Declaring string> >string str;> > >// Taking string input using getline()> >getline(cin, str);> > >// Displaying string> >cout <<>'The initial string is : '>;> >cout << str << endl;> > >// Inserting a character> >str.push_back(>'s'>);> > >// Displaying string> >cout <<>'The string after push_back operation is : '>;> >cout << str << endl;> > >// Deleting a character> >str.pop_back();> > >// Displaying string> >cout <<>'The string after pop_back operation is : '>;> >cout << str << endl;> > >return> 0;> }>

>

>

Ieșire

The initial string is : The string after push_back operation is : s The string after pop_back operation is :>

Complexitatea timpului: O(1)

Complexitatea spațiului: O(n) unde n este dimensiunea șirului

2) Funcții de capacitate

Funcţie Definiție
capacitate() Această funcție returnează capacitatea alocată șirului, care poate fi egală sau mai mare decât dimensiunea șirului. Spațiul suplimentar este alocat astfel încât atunci când noile caractere sunt adăugate în șir, operațiunile pot fi efectuate eficient.
redimensiona() Această funcție modifică dimensiunea șirului, dimensiunea poate fi mărită sau micșorată.
lungime() Această funcție găsește lungimea șirului.
shrink_to_fit() Această funcție scade capacitatea șirului și o face egală cu capacitatea minimă a șirului. Această operațiune este utilă pentru a economisi memorie suplimentară dacă suntem siguri că nu mai trebuie adăugate caractere.

Exemplu:

CPP




// C++ Program to demonstrate the working of> // capacity(), resize() and shrink_to_fit()> #include> #include // for string class> using> namespace> std;> > // Driver Code> int> main()> {> >// Initializing string> >string str =>'geeksforgeeks is for geeks'>;> > >// Displaying string> >cout <<>'The initial string is : '>;> >cout << str << endl;> > >// Resizing string using resize()> >str.resize(13);> > >// Displaying string> >cout <<>'The string after resize operation is : '>;> >cout << str << endl;> > >// Displaying capacity of string> >cout <<>'The capacity of string is : '>;> >cout << str.capacity() << endl;> > >// Displaying length of the string> >cout <<>'The length of the string is :'> << str.length()> ><< endl;> > >// Decreasing the capacity of string> >// using shrink_to_fit()> >str.shrink_to_fit();> > >// Displaying string> >cout <<>'The new capacity after shrinking is : '>;> >cout << str.capacity() << endl;> > >return> 0;> }>

rând vs coloană

>

>

Ieșire

The initial string is : geeksforgeeks is for geeks The string after resize operation is : geeksforgeeks The capacity of string is : 26 The length of the string is :13 The new capacity after shrinking is : 13>

Complexitatea timpului: O(1)

Complexitatea spațiului: O(n) unde n este dimensiunea șirului

3) Funcții de iterator

Funcţie Definiție
ÎNCEPE() Această funcție returnează un iterator la începutul șirului.
Sfârşit() Această funcție returnează un iterator la următorul sfârșit al șirului.
rbegin() Această funcție returnează un iterator invers care indică la sfârșitul șirului.
face() Această funcție returnează un iterator invers care indică la începutul și precedentul șirului.
cbegin() Această funcție returnează un iterator constant care indică la începutul șirului, nu poate fi folosită pentru a modifica conținutul către care indică.
câțiva() Această funcție returnează un iterator constant care indică la următorul capăt al șirului, nu poate fi folosită pentru a modifica conținutul către care indică.
crbegin() Această funcție returnează un iterator invers constant care indică la sfârșitul șirului, nu poate fi folosită pentru a modifica conținutul către care indică.
crend() Această funcție returnează un iterator invers constant care indică la începutul și precedentul șirului, nu poate fi folosită pentru a modifica conținutul către care indică.

Algoritm:

  1. Declarați un șir
  2. Încercați să repetați șirul folosind toate tipurile de iteratoare
  3. Încercați să modificați elementul șirului.
  4. Afișează toate iterațiile.

Exemplu:

CPP




// C++ Program to demonstrate the working of> // begin(), end(), rbegin(), rend(), cbegin(), cend(), crbegin(), crend()> #include> #include // for string class> using> namespace> std;> > // Driver Code> int> main()> {> >// Initializing string`> >string str =>'geeksforgeeks'>;> > >// Declaring iterator> >std::string::iterator it;> > >// Declaring reverse iterator> >std::string::reverse_iterator it1;> >cout<<>'Str:'><' '; // Displaying string cout << 'The string using forward iterators is : '; for (it = str.begin(); it != str.end(); it++){ if(it == str.begin()) *it='G'; cout << *it; } cout << endl; str = 'geeksforgeeks'; // Displaying reverse string cout << 'The reverse string using reverse iterators is ' ': '; for (it1 = str.rbegin(); it1 != str.rend(); it1++){ if(it1 == str.rbegin()) *it1='S'; cout << *it1; } cout << endl; str = 'geeksforgeeks'; //Displaying String cout<<'The string using constant forward iterator is :'; for(auto it2 = str.cbegin(); it2!=str.cend(); it2++){ //if(it2 == str.cbegin()) *it2='G'; //here modification is NOT Possible //error: assignment of read-only location //As it is a pointer to the const content, but we can inc/dec-rement the iterator cout<<*it2; } cout<<' '; str = 'geeksforgeeks'; //Displaying String in reverse cout<<'The reverse string using constant reverse iterator is :'; for(auto it3 = str.crbegin(); it3!=str.crend(); it3++){ //if(it2 == str.cbegin()) *it2='S'; //here modification is NOT Possible //error: assignment of read-only location //As it is a pointer to the const content, but we can inc/dec-rement the iterator cout<<*it3; } cout<<' '; return 0; } //Code modified by Balakrishnan R (rbkraj000)>

>

>

Ieșire

Str:geeksforgeeks The string using forward iterators is : Geeksforgeeks The reverse string using reverse iterators is : Skeegrofskeeg The string using constant forward iterator is :geeksforgeeks The reverse string using constant reverse iterator is :skeegrofskeeg>

Complexitatea timpului: O(1)

Complexitatea spațiului: O(n) unde n este dimensiunea șirului

4) Funcții de manipulare:

Funcţie Definiție
copie (matrice de caractere, len, pos) Această funcție copiază subșirul din matricea de caractere țintă menționată în argumentele sale. Este nevoie de 3 argumente, matrice de caractere țintă, lungime pentru a fi copiată și poziția de pornire în șir pentru a începe copierea.
swap() Această funcție schimbă un șir cu altul

Exemplu:

CPP




tăiere șiruri javascript

// C++ Program to demonstrate the working of> // copy() and swap()> #include> #include // for string class> using> namespace> std;> > // Driver Code> int> main()> {> >// Initializing 1st string> >string str1 =>'geeksforgeeks is for geeks'>;> > >// Declaring 2nd string> >string str2 =>'geeksforgeeks rocks'>;> > >// Declaring character array> >char> ch[80];> > >// using copy() to copy elements into char array> >// copies 'geeksforgeeks'> >str1.copy(ch, 13, 0);> > >// Displaying char array> >cout <<>'The new copied character array is : '>;> >cout << ch << endl;> > >// Displaying strings before swapping> >cout <<>'The 1st string before swapping is : '>;> >cout << str1 << endl;> >cout <<>'The 2nd string before swapping is : '>;> >cout << str2 << endl;> > >// using swap() to swap string content> >str1.swap(str2);> > >// Displaying strings after swapping> >cout <<>'The 1st string after swapping is : '>;> >cout << str1 << endl;> >cout <<>'The 2nd string after swapping is : '>;> >cout << str2 << endl;> > >return> 0;> }>

>

>

Ieșire

The new copied character array is : geeksforgeeks The 1st string before swapping is : geeksforgeeks is for geeks The 2nd string before swapping is : geeksforgeeks rocks The 1st string after swapping is : geeksforgeeks rocks The 2nd string after swapping is : geeksforgeeks is for geeks>

Trebuie citit: Clasa String C++ și aplicațiile sale