C++ apibrėžime yra būdas pavaizduoti a simbolių seka kaip klasės objektas . Ši klasė vadinama std:: string. Eilučių klasė saugo simbolius kaip baitų seką su leidimo funkcija prieiga prie vieno baito simbolio .
Eilutė vs simbolių masyvas
| Styga | Char Array |
|---|---|
| Styga yra a klasė, kuri apibrėžia objektus kurie turi būti vaizduojami kaip simbolių srautas. | Simbolių masyvas yra tiesiog an simbolių masyvas kurį galima užbaigti nuliniu simboliu. |
| Stygų atveju atmintis yra paskirstoma dinamiškai . Veiklos metu pagal poreikį galima skirti daugiau atminties. Kadangi atmintis iš anksto nepaskirstyta, atmintis nėra švaistoma . | Simbolių masyvo dydis turi būti paskirstytas statiškai , jei reikia, daugiau atminties negalima skirti vykdymo metu. Nepanaudota paskirta atmintis taip pat eikvojama |
| Kadangi eilutės vaizduojamos kaip objektai, jokio masyvo irimo atsiranda. | Čia yra grėsmė masyvo irimas simbolių masyvo atveju. |
| Stygos yra lėtesnės lyginant su įgyvendinimu nei simbolių masyvas. | Įgyvendinimas simbolių masyvas yra greitesnis nei std:: eilutė. |
| Stygų klasė apibrėžia daug funkcijų kurios leidžia atlikti kolektoriaus operacijas su stygomis. | Simbolių masyvai nesiūlyti daug integruotos funkcijos manipuliuoti stygomis. |
Operacijos su stygomis
1) Įvesties funkcijos
| Funkcija | Apibrėžimas |
|---|---|
| getline () | Ši funkcija naudojama vartotojo įvestam simbolių srautui saugoti objekto atmintyje. |
| pastumti atgal() | Ši funkcija naudojama simboliui įvesti eilutės pabaigoje. |
| pop_back() | Ši funkcija, sukurta iš C++11 (eilutės), naudojama paskutiniam simboliui iš eilutės ištrinti. |
Pavyzdys:
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;> }> |
>
>Išvestis
123 filmas
The initial string is : The string after push_back operation is : s The string after pop_back operation is :>
Laiko sudėtingumas: O(1)
Erdvės sudėtingumas: O(n) kur n yra eilutės dydis
2) Talpos funkcijos
| Funkcija | Apibrėžimas |
|---|---|
| talpa () | Ši funkcija grąžina eilutei skirtą talpą, kuri gali būti lygi arba didesnė už eilutės dydį. Papildoma vieta yra skirta tam, kad į eilutę įtraukus naujus simbolius, operacijas būtų galima atlikti efektyviai. |
| pakeisti dydį () | Ši funkcija keičia eilutės dydį, dydį galima padidinti arba sumažinti. |
| ilgis () | Ši funkcija nustato eilutės ilgį. |
| Sumažinti, kad tilptų() | Ši funkcija sumažina eilutės talpą ir padaro ją lygią minimaliai eilutės talpai. Ši operacija naudinga norint sutaupyti papildomos atminties, jei esame tikri, kad daugiau simbolių nereikia pridėti. |
Pavyzdys:
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;> }> |
>
>Išvestis
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>
Laiko sudėtingumas: O(1)
Erdvės sudėtingumas: O(n) kur n yra eilutės dydis
3) Iteratoriaus funkcijos
| Funkcija | Apibrėžimas |
|---|---|
| pradėti () | Ši funkcija grąžina iteratorių į eilutės pradžią. |
| galas() | Ši funkcija grąžina iteratorių į kitą eilutės pabaigą. |
| rbegin () | Ši funkcija grąžina atvirkštinį iteratorių, nukreiptą į eilutės pabaigą. |
| pateikti () | Ši funkcija grąžina atvirkštinį iteratorių, nukreipiantį į ankstesnę eilutės pradžią. |
| cbegin() | Ši funkcija grąžina nuolatinį iteratorių, nukreipiantį į eilutės pradžią, jos negalima naudoti norint keisti turinį, į kurį ji nukreipia. |
| keletas() | Ši funkcija grąžina nuolatinį iteratorių, nukreipiantį į kitą eilutės pabaigą, jos negalima naudoti norint keisti turinį, į kurį ji nukreipia. |
| crbegin () | Ši funkcija grąžina nuolatinį atvirkštinį iteratorių, nukreipiantį į eilutės pabaigą, jos negalima naudoti norint keisti turinį, į kurį ji nukreipia. |
| crend () | Ši funkcija grąžina nuolatinį atvirkštinį iteratorių, nukreipiantį į ankstesnįjį eilutės pradžią, jos negalima naudoti norint keisti turinį, į kurį ji nukreipia. |
Algoritmas:
- Paskelbkite eilutę
- Pabandykite pakartoti eilutę naudodami visų tipų iteratorius
- Pabandykite pakeisti eilutės elementą.
- Rodyti visas iteracijas.
Pavyzdys:
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:'><'
'; // 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<<'
'; 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<<'
'; return 0; } //Code modified by Balakrishnan R (rbkraj000)> |
>
>Išvestis
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>
Laiko sudėtingumas: O(1)
Erdvės sudėtingumas: O(n) kur n yra eilutės dydis
4) Manipuliavimo funkcijomis:
| Funkcija | Apibrėžimas |
|---|---|
| kopija (char array, len, poz) | Ši funkcija nukopijuoja jos argumentuose paminėtą eilutę tiksliniame simbolių masyve. Norint pradėti kopijuoti, reikia 3 argumentų, tikslinių simbolių masyvo, ilgio, kurį reikia nukopijuoti, ir pradinės padėties eilutėje. |
| apsikeitimas () | Ši funkcija pakeičia vieną eilutę kita |
Pavyzdys:
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;> }> |
>
>Išvestis
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>
Privaloma perskaityti: C++ stygų klasė ir jos programos