std::string třídy v C++

C++ má ve své definici způsob, jak reprezentovat a posloupnost znaků jako objekt třídy . Tato třída se nazývá std:: string. Třída string ukládá znaky jako posloupnost bajtů s funkcí povolení přístup k jednobajtovému znaku .

Pole řetězců vs. znaků

Řetězec

Char Array

 Řetězec je a třída, která definuje objekty které jsou reprezentovány jako proud postav. Pole znaků je prostě an pole znaků který může být ukončen znakem null.
V případě řetězců je paměť dynamicky přidělovány . Více paměti lze alokovat za běhu na vyžádání. Protože není předem přidělena žádná paměť žádná paměť není plýtvána . Velikost pole znaků musí být přiděleno staticky V případě potřeby nelze za běhu přidělit více paměti. Nepoužité přidělené paměť je také plýtvána
Jako řetězce jsou reprezentovány jako objekty žádný rozpad pole dochází. Existuje a ohrožení rozpad pole v případě pole znaků. 
Struny jsou pomalejší ve srovnání s implementací než pole znaků. Provádění pole znaků je rychlejší než std:: řetězec. 
Třída String definuje řadu funkcí které umožňují mnohonásobné operace na řetězcích. Pole znaků nenabízejte mnoho vestavěné funkce manipulovat se strunami.

Operace na řetězcích

1) Vstupní funkce

Funkce Definice
getline() Tato funkce se používá k uložení proudu znaků zadaných uživatelem do paměti objektu.
push_back() Tato funkce se používá k zadání znaku na konci řetězce.
pop_back() Tato funkce zavedená z C++11 (pro řetězce) se používá k odstranění posledního znaku z řetězce. 

Příklad:

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

Výstup
The initial string is : The string after push_back operation is : s The string after pop_back operation is :  

Časová složitost: O(1)

Vesmírná složitost: O(n) kde n je velikost řetězce

2) Kapacitní funkce

Funkce Definice
kapacita() Tato funkce vrací kapacitu přidělenou řetězci, která může být rovna nebo větší než velikost řetězce. Je přiděleno další místo, takže po přidání nových znaků do řetězce lze operace provádět efektivně.
změnit velikost () Tato funkce mění velikost řetězce, kterou lze zvětšit nebo zmenšit.
délka() Tato funkce zjistí délku řetězce.
shrink_to_fit() Tato funkce snižuje kapacitu řetězce a rovná se minimální kapacitě řetězce. Tato operace je užitečná pro úsporu další paměti, pokud jsme si jisti, že není třeba provádět žádné další přidávání znaků.

Příklad:

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

Výstup
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 

Časová složitost: O(1)

Vesmírná složitost: O(n) kde n je velikost řetězce

3) Funkce iterátoru

Funkce Definice
začít() Tato funkce vrací iterátor na začátek řetězce.
konec() Tato funkce vrací iterátor na další konec řetězce.
rbegin() Tato funkce vrací zpětný iterátor ukazující na konec řetězce.
render() Tato funkce vrací zpětný iterátor ukazující na předchozí začátek řetězce.
cbegin() Tato funkce vrací konstantní iterátor ukazující na začátek řetězce, který nelze použít k úpravě obsahu, na který ukazuje.
několik() Tato funkce vrací konstantní iterátor ukazující na další konec řetězce, který nelze použít k úpravě obsahu, na který ukazuje.
crbegin() Tato funkce vrací konstantní reverzní iterátor ukazující na konec řetězce, který nelze použít k úpravě obsahu, na který ukazuje.
Crend() Tato funkce vrací konstantní reverzní iterátor ukazující na předchozí začátek řetězce, který nelze použít k úpravě obsahu, na který ukazuje.

Algoritmus:

  1. Deklarujte řetězec
  2. Zkuste iterovat řetězec pomocí všech typů iterátorů
  3. Zkuste modifikaci prvku řetězce.
  4. Zobrazit všechny iterace.

Příklad:

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)   

Výstup
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 

Časová složitost: O(1)

Vesmírná složitost: O(n) kde n je velikost řetězce

4) Manipulační funkce:

Funkce Definice
copy('char array' len pos)  Tato funkce zkopíruje podřetězec v cílovém poli znaků uvedeném v jejích argumentech. Ke zkopírování jsou zapotřebí 3 argumenty délky cílového pole znaků a ke spuštění kopírování počáteční pozice v řetězci.
swap() Tato funkce vymění jeden řetězec za jiný

Příklad:

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

Výstup
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 


Musí si přečíst: Řetězcová třída C++ a její aplikace