logo

std::string klasa u C++

C++ ima u svojoj definiciji način predstavljanja a niz znakova kao objekt klase . Ova klasa se zove std::string. Klasa niza pohranjuje znakove kao niz bajtova s ​​funkcionalnošću dopuštanja pristup jednobajtnom znaku .

String vs Character Array

Niz



Char Array

 Niz je a klasa koja definira objekte koji se predstavljaju kao tok znakova.Niz znakova je jednostavno niz znakova koji se može završiti nultim znakom.
U slučaju stringova memorija je dodijeljena dinamički . Više memorije može se dodijeliti tijekom izvođenja na zahtjev. Budući da memorija nije unaprijed dodijeljena ne gubi se memorija .Veličina niza znakova mora biti statički dodijeljena više memorije ne može se dodijeliti tijekom izvođenja ako je potrebno. Neiskorišteno dodijeljeno memorija se također gubi
Kako su nizovi predstavljeni kao objekti nema raspada niza javlja se.postoji prijetnja od array raspadanje u slučaju niza znakova. 
Žice su sporije u usporedbi s implementacijom od niza znakova.Provedba niz znakova je brži nego std:: niz. 
String klasa definira niz funkcionalnosti koji dopuštaju višestruke operacije na nizovima.Nizovi znakova ne nuditi mnogi ugrađene funkcije manipulirati žicama.

Operacije na nizovima

1) Ulazne funkcije

FunkcijaDefinicija
getline() Ova se funkcija koristi za pohranjivanje toka znakova koje je korisnik unio u memoriju objekta.
push_back() Ova se funkcija koristi za unos znaka na kraju niza.
pop_back()Uvedena iz C++11 (za nizove) ova se funkcija koristi za brisanje posljednjeg znaka iz niza. 

Primjer:

za petlju java
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; } 

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

Vremenska složenost: O(1)



Složenost prostora: O(n) gdje je n veličina niza

2) Funkcije kapaciteta

FunkcijaDefinicija
kapacitet()Ova funkcija vraća kapacitet dodijeljen nizu koji može biti jednak ili veći od veličine niza. Dodatni prostor se dodjeljuje tako da kada se novi znakovi dodaju u niz, operacije mogu biti izvedene učinkovito.
promijeni veličinu() Ova funkcija mijenja veličinu niza, veličina se može povećati ili smanjiti.
duljina ()Ova funkcija pronalazi duljinu niza.
skupi_da_stane()Ova funkcija smanjuje kapacitet niza i čini ga jednakim minimalnom kapacitetu niza. Ova je operacija korisna za uštedu dodatne memorije ako smo sigurni da ne treba dodatno dodavati znakove.

Primjer:

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; } 

Izlaz
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

Vremenska složenost: O(1)



Složenost prostora: O(n) gdje je n veličina niza

3) Funkcije iteratora

FunkcijaDefinicija
početi()Ova funkcija vraća iterator na početak niza.
kraj()Ova funkcija vraća iterator na sljedeći kraj niza.
rbegin()Ova funkcija vraća obrnuti iterator koji pokazuje na kraj niza.
render()Ova funkcija vraća obrnuti iterator koji pokazuje na prethodni početak niza.
cbegin()Ova funkcija vraća konstantni iterator koji pokazuje na početak niza koji se ne može koristiti za izmjenu sadržaja na koji pokazuje.
nekoliko()Ova funkcija vraća konstantni iterator koji pokazuje na sljedeći kraj niza i ne može se koristiti za izmjenu sadržaja na koji pokazuje.
crbegin()Ova funkcija vraća konstantni obrnuti iterator koji pokazuje na kraj niza koji se ne može koristiti za izmjenu sadržaja na koji pokazuje.
crend()Ova funkcija vraća konstantni obrnuti iterator koji pokazuje na prethodni početak niza i ne može se koristiti za izmjenu sadržaja na koji pokazuje.

Algoritam:

  1. Deklarirajte niz
  2. Pokušajte iterirati niz koristeći sve vrste iteratora
  3. Pokušajte modificirati element niza.
  4. Prikaz svih ponavljanja.

Primjer:

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:'<<str<<'n';  // 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<<'n';    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<<'n';  return 0; } //Code modified by Balakrishnan R (rbkraj000) 

Izlaz
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

Vremenska složenost: O(1)

Složenost prostora: O(n) gdje je n veličina niza

4) Manipulacijske funkcije:

FunkcijaDefinicija
kopija ('char array' len pos) Ova funkcija kopira podniz u ciljnom nizu znakova spomenutom u svojim argumentima. Potrebna su 3 argumenta ciljna duljina niza znakova za kopiranje i početna pozicija u nizu za početak kopiranja.
zamijeniti ()Ova funkcija zamjenjuje jedan niz drugim

Primjer:

CPP
// 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; } 

Izlaz
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


Obavezno pročitati: C++ String klasa i njezine primjene