klasa std::string w C++

C++ ma w swojej definicji sposób reprezentowania a sekwencja znaków jako obiekt klasy . Ta klasa nazywa się std::string. Klasa string przechowuje znaki jako sekwencję bajtów z funkcją zezwalania dostęp do znaku jednobajtowego .

Ciąg znaków a tablica znaków

Smyczkowy

Tablica znaków

 Ciąg to a klasa definiująca obiekty które można przedstawić jako strumień znaków. Tablica znaków to po prostu tablica tablica znaków które można zakończyć znakiem null.
W przypadku ciągów pamięć jest przydzielane dynamicznie . Na żądanie można przydzielić więcej pamięci w czasie wykonywania. Ponieważ żadna pamięć nie jest wstępnie przydzielona żadna pamięć się nie marnuje . Rozmiar tablicy znaków musi być przydzielane statycznie W razie potrzeby nie można przydzielić większej ilości pamięci w czasie wykonywania. Niewykorzystane przydzielone pamięć też jest marnowana
Ponieważ ciągi znaków są reprezentowane jako obiekty brak rozpadu tablicy występuje. Jest groźba rozpad tablicy
Struny są wolniejsze w porównaniu do implementacji niż tablica znaków. Realizacja tablica znaków jest szybsza niż std:: ciąg. 
Klasa String definiuje szereg funkcjonalności które umożliwiają różnorodne operacje na ciągach znaków. Tablice znaków nie oferuj wiele wbudowane funkcje do manipulowania ciągami.

Operacje na łańcuchach

1) Funkcje wejściowe

Funkcjonować Definicja
getline() Funkcja ta służy do przechowywania w pamięci obiektu ciągu znaków wprowadzonych przez użytkownika.
push_back() Ta funkcja służy do wprowadzania znaku na końcu łańcucha.
pop_back() Wprowadzona z C++ 11 (dla ciągów znaków) ta funkcja służy do usuwania ostatniego znaku z ciągu. 

Przykład:

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

Wyjście
The initial string is : The string after push_back operation is : s The string after pop_back operation is :  

Złożoność czasowa: O(1)

Złożoność przestrzeni: O(n) gdzie n jest rozmiarem łańcucha

2) Funkcje pojemności

Funkcjonować Definicja
pojemność() Ta funkcja zwraca pojemność przydzieloną do ciągu, która może być równa lub większa od rozmiaru ciągu. Przydzielana jest dodatkowa przestrzeń, dzięki czemu po dodaniu nowych znaków do ciągu można efektywnie wykonywać operacje.
zmień rozmiar() Funkcja ta zmienia rozmiar ciągu znaków, rozmiar można zwiększyć lub zmniejszyć.
długość() Ta funkcja znajduje długość ciągu.
zmniejszyć_do_dopasowania() Funkcja ta zmniejsza pojemność łańcucha i zrównuje ją z minimalną pojemnością łańcucha. Ta operacja jest przydatna, aby zaoszczędzić dodatkową pamięć, jeśli mamy pewność, że nie trzeba już dodawać znaków.

Przykład:

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

Wyjście
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 

Złożoność czasowa: O(1)

Złożoność przestrzeni: O(n) gdzie n jest rozmiarem łańcucha

3) Funkcje iteratora

Funkcjonować Definicja
zaczynać() Ta funkcja zwraca iterator na początek ciągu.
koniec() Ta funkcja zwraca iterator do następnego końca ciągu.
rzacznij() Ta funkcja zwraca iterator odwrotny wskazujący na koniec ciągu.
oddać() Ta funkcja zwraca iterator odwrotny wskazujący na poprzedni początek ciągu.
cbegin() Funkcja ta zwraca stały iterator wskazujący początek ciągu znaków, którego nie można użyć do modyfikacji zawartości, na którą wskazuje.
kilka() Ta funkcja zwraca stały iterator wskazujący na następny koniec łańcucha, którego nie można użyć do modyfikacji zawartości, na którą wskazuje.
crbegin() Ta funkcja zwraca stały iterator odwrotny wskazujący na koniec łańcucha, którego nie można użyć do modyfikacji zawartości, na którą wskazuje.
wiara() Ta funkcja zwraca stały iterator odwrotny wskazujący na poprzedni początek łańcucha, którego nie można użyć do modyfikacji zawartości, na którą wskazuje.

Algorytm:

  1. Zadeklaruj ciąg
  2. Spróbuj iterować ciąg znaków, używając wszystkich typów iteratorów
  3. Spróbuj zmodyfikować element ciągu.
  4. Wyświetl wszystkie iteracje.

Przykład:

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)   

Wyjście
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 

Złożoność czasowa: O(1)

Złożoność przestrzeni: O(n) gdzie n jest rozmiarem łańcucha

4) Manipulowanie funkcjami:

Funkcjonować Definicja
copy('tablica znaków' len pos)  Ta funkcja kopiuje podciąg z docelowej tablicy znaków wymienionej w jej argumentach. Aby rozpocząć kopiowanie, potrzebne są 3 argumenty: docelowa długość tablicy znaków do skopiowania i pozycja początkowa w ciągu znaków.
zamieniać() Ta funkcja zamienia jeden ciąg znaków na inny

Przykład:

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

Wyjście
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 


Musisz przeczytać: