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:
- Bir dize bildirin
- Tüm yineleyici türlerini kullanarak dizeyi yinelemeyi deneyin
- Dizenin öğesini değiştirmeyi deneyin.
- 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ı