std::string-klasse in C++

C++ heeft in zijn definitie een manier om a weer te geven reeks tekens als object van de klasse . Deze klasse heet std:: string. De stringklasse slaat de tekens op als een reeks bytes met de functionaliteit van toestaan toegang tot het single-byte-teken .

Tekenreeks versus tekenarray

Snaar

Char-array

 Een string is een klasse die objecten definieert die worden weergegeven als een stroom van karakters. Een karakterarray is eenvoudigweg een reeks karakters dat kan worden beëindigd door een nulteken.
In het geval van strings is het geheugen dat wel dynamisch toegewezen . Op verzoek kan tijdens runtime meer geheugen worden toegewezen. Omdat er geen geheugen vooraf is toegewezen er gaat geen geheugen verloren . De grootte van de karakterarray moet zijn statisch toegewezen indien nodig kan er tijdens runtime niet meer geheugen worden toegewezen. Ongebruikt toegewezen geheugen wordt ook verspild
Omdat strings worden weergegeven als objecten geen array-verval komt voor. Er is een dreiging van array verval in het geval van de karakterarray. 
Snaren zijn langzamer in vergelijking met implementatie dan karakterarray. Implementatie van karakterarray is sneller dan std:: tekenreeks. 
String-klasse definieert een aantal functionaliteiten die veelvuldige bewerkingen op snaren mogelijk maken. Karakterarrays niet aanbieden veel ingebouwde functies om snaren te manipuleren.

Bewerkingen op tekenreeksen

1) Invoerfuncties

Functie Definitie
getline() Deze functie wordt gebruikt om een ​​stroom karakters, zoals ingevoerd door de gebruiker, op te slaan in het objectgeheugen.
push_back() Deze functie wordt gebruikt om een ​​teken aan het einde van de string in te voeren.
pop_back() Geïntroduceerd vanuit C++11 (voor strings). Deze functie wordt gebruikt om het laatste teken uit de string te verwijderen. 

Voorbeeld:

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

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

Tijdcomplexiteit: O(1)

Ruimtecomplexiteit: O(n) waarbij n de grootte van de string is

2) Capaciteitsfuncties

Functie Definitie
capaciteit() Deze functie retourneert de capaciteit die aan de string is toegewezen en die gelijk kan zijn aan of groter is dan de grootte van de string. Er wordt extra ruimte toegewezen, zodat wanneer de nieuwe tekens aan de string worden toegevoegd, de bewerkingen efficiënt kunnen worden uitgevoerd.
formaat wijzigen() Deze functie verandert de grootte van de string. De grootte kan worden vergroot of verkleind.
lengte() Deze functie vindt de lengte van de string.
krimpen_tot_fit() Deze functie verlaagt de capaciteit van de string en maakt deze gelijk aan de minimumcapaciteit van de string. Deze handeling is handig om extra geheugen te besparen als we er zeker van zijn dat er geen verdere toevoeging van tekens nodig is.

Voorbeeld:

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

Uitvoer
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 

Tijdcomplexiteit: O(1)

Ruimtecomplexiteit: O(n) waarbij n de grootte van de string is

3) Iteratorfuncties

Functie Definitie
beginnen() Deze functie retourneert een iterator naar het begin van de tekenreeks.
einde() Deze functie retourneert een iterator naar het volgende einde van de tekenreeks.
rbegin() Deze functie retourneert een omgekeerde iterator die naar het einde van de tekenreeks wijst.
veroorzaken() Deze functie retourneert een omgekeerde iterator die verwijst naar het vorige begin van de tekenreeks.
cbegin() Deze functie retourneert een constante iterator die verwijst naar het begin van de tekenreeks. Deze kan niet worden gebruikt om de inhoud waarnaar deze verwijst te wijzigen.
een paar() Deze functie retourneert een constante iterator die verwijst naar het volgende einde van de tekenreeks. Deze kan niet worden gebruikt om de inhoud waarnaar deze verwijst te wijzigen.
crbegin() Deze functie retourneert een constante omgekeerde iterator die naar het einde van de tekenreeks wijst en niet kan worden gebruikt om de inhoud waarnaar deze verwijst te wijzigen.
crend() Deze functie retourneert een constante omgekeerde iterator die verwijst naar het vorige begin van de tekenreeks. Deze kan niet worden gebruikt om de inhoud waarnaar deze verwijst te wijzigen.

Algoritme:

  1. Declareer een tekenreeks
  2. Probeer de string te herhalen met behulp van alle soorten iterators
  3. Probeer het element van de string te wijzigen.
  4. Geef alle iteraties weer.

Voorbeeld:

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)   

Uitvoer
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 

Tijdcomplexiteit: O(1)

Ruimtecomplexiteit: O(n) waarbij n de grootte van de string is

4) Manipulatiefuncties:

Functie Definitie
copy('char array' len pos)  Deze functie kopieert de subtekenreeks in de doeltekenarray die in de argumenten wordt vermeld. Er zijn 3 argumenten nodig, de lengte van de target char-array, om te kopiëren en de startpositie in de string om het kopiëren te starten.
ruil() Deze functie verwisselt de ene string met de andere

Voorbeeld:

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

Uitvoer
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 


Moet lezen: C++ String Class en zijn toepassingen