C++'da std::string sınıfı

C++'ın tanımında bir şeyi temsil etmenin bir yolu vardır. sınıfın bir nesnesi olarak karakter dizisi . Bu sınıfa std:: string adı verilir. String sınıfı, izin verme işleviyle karakterleri bir bayt dizisi halinde saklar. tek baytlık karaktere erişim .

Dize ve Karakter Dizisi

Sicim

Karakter Dizisi

 Bir dize bir nesneleri tanımlayan sınıf bir karakter akışı olarak temsil edilir. Bir karakter dizisi basitçe bir karakter dizisi boş bir karakterle sonlandırılabilir.
Dizeler durumunda bellek dinamik olarak tahsis edildi . Talep üzerine çalışma zamanında daha fazla bellek tahsis edilebilir. Hiçbir bellek önceden tahsis edilmediğinden hiçbir hafıza boşa harcanmaz . Karakter dizisinin boyutu şu şekilde olmalıdır: statik olarak tahsis edilmiş Gerektiğinde çalışma zamanında daha fazla bellek ayrılamaz. Kullanılmayan tahsis edilmiş hafıza da boşa harcanıyor
Dizeler nesneler olarak temsil edildiğinden dizi bozulması yok meydana gelmek. bir tane var tehdidi dizi bozulması karakter dizisi durumunda. 
Dizeler daha yavaş uygulamayla karşılaştırıldığında karakter dizisinden daha fazladır. Uygulanması karakter dizisi daha hızlıdır std:: string'den daha fazla. 
Dize sınıfı tanımlar bir dizi işlevsellik dizelerde manifold işlemlerine izin veren. Karakter dizileri teklif etme birçok dahili işlevler dizeleri işlemek için.

Dizeler Üzerindeki İşlemler

1) Giriş İşlevleri

İşlev Tanım
getline() Bu işlev, kullanıcı tarafından girilen karakter akışını nesne belleğine depolamak için kullanılır.
push_back() Bu fonksiyon stringin sonuna bir karakter girmek için kullanılır.
pop_back() C++11'den (dizeler için) tanıtılan bu işlev, dizedeki son karakteri silmek için kullanılır. 

Örnek:

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

Çıkış
The initial string is : The string after push_back operation is : s The string after pop_back operation is :  

Zaman Karmaşıklığı: O(1)

Uzay Karmaşıklığı: O(n) burada n dizenin boyutudur

2) Kapasite Fonksiyonları

İşlev Tanım
kapasite() Bu işlev, dizenin boyutuna eşit veya ondan daha fazla olabilen, dizeye tahsis edilen kapasiteyi döndürür. String'e yeni karakterler eklendiğinde işlemlerin verimli bir şekilde yapılabilmesi için ek alan ayrılır.
yeniden boyutlandır() Bu işlev dizenin boyutunu değiştirir; boyut artırılabilir veya azaltılabilir.
uzunluk() Bu fonksiyon stringin uzunluğunu bulur.
küçültme_to_fit() Bu fonksiyon stringin kapasitesini azaltır ve stringin minimum kapasitesine eşitler. Bu işlem, daha fazla karakter eklenmesi gerekmediğine eminsek, ek bellek tasarrufu sağlamak için kullanışlıdır.

Örnek:

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

Çıkış
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 

Zaman Karmaşıklığı: O(1)

Uzay Karmaşıklığı: O(n) burada n dizenin boyutudur

3) Yineleyici Fonksiyonlar

İşlev Tanım
başlamak() Bu işlev, dizenin başına bir yineleyici döndürür.
son() Bu işlev, dizenin sonuna bir sonraki yineleyiciyi döndürür.
rbegin() Bu işlev, dizenin sonunu işaret eden bir ters yineleyici döndürür.
oluşturma() Bu işlev, dizenin başlangıcındaki öncekine işaret eden bir ters yineleyici döndürür.
cbegin() Bu işlev, işaret ettiği içeriği değiştirmek için kullanılamayan dizenin başlangıcına işaret eden sabit bir yineleyici döndürür.
bir kaç() Bu işlev, işaret ettiği içeriği değiştirmek için kullanılamayan dizenin bir sonraki sonuna işaret eden sabit bir yineleyici döndürür.
crbegin() Bu işlev, işaret ettiği içeriği değiştirmek için kullanılamayan dizenin sonuna işaret eden sabit bir ters yineleyici döndürür.
kredi() Bu işlev, dizenin başlangıcından öncekine işaret eden sabit bir ters yineleyici döndürür; işaret ettiği içeriği değiştirmek için kullanılamaz.

Algoritma:

  1. Bir dize bildirin
  2. Tüm yineleyici türlerini kullanarak dizeyi yinelemeyi deneyin
  3. Dizenin öğesini değiştirmeyi deneyin.
  4. Tüm yinelemeleri görüntüleyin.

Örnek:

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)   

Çıkış
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 

Zaman Karmaşıklığı: O(1)

Uzay Karmaşıklığı: O(n) burada n dizenin boyutudur

4) İşlevleri Değiştirme:

İşlev Tanım
kopyala('karakter dizisi' len konum)  Bu işlev, bağımsız değişkenlerinde belirtilen hedef karakter dizisindeki alt dizeyi kopyalar. Kopyalanacak karakter dizisi uzunluğunu ve kopyalamaya başlamak için dizedeki başlangıç ​​konumunu hedefleyen 3 bağımsız değişken gerekir.
takas() Bu işlev bir dizeyi diğeriyle değiştirir

Örnek:

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

Çıkış
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 


Okumalısınız: C++ String Sınıfı ve Uygulamaları