logo

razred std::string v C++

C++ ima v svoji definiciji način za predstavitev a zaporedje znakov kot objekt razreda . Ta razred se imenuje std::string. Razred niza shrani znake kot zaporedje bajtov s funkcijo dopuščanja dostop do enobajtnega znaka .

Niz proti nizu znakov

Vrvica



Char Array

Niz je a razred, ki definira objekte ki so predstavljeni kot tok znakov. Niz znakov je preprosto nabor znakov ki se lahko zaključi z ničelnim znakom.
V primeru nizov je spomin dodeljuje dinamično . Na zahtevo je med izvajanjem mogoče dodeliti več pomnilnika. Ker noben pomnilnik ni vnaprej dodeljen, noben spomin ni izgubljen . Velikost niza znakov mora biti statično dodeljena , več pomnilnika ni mogoče dodeliti med izvajanjem, če je to potrebno. Neuporabljeno dodeljeno pomnilnik je tudi izgubljen
Ker so nizi predstavljeni kot predmeti, brez razpada niza pojavi. Obstaja a grožnja z razpad niza v primeru niza znakov.
Strune so počasnejše v primerjavi z izvedbo kot niz znakov. Izvedba niz znakov je hitrejši kot std:: niz.
Razred niza definira številne funkcionalnosti ki omogočajo mnogotere operacije na nizih. Nizi znakov ne ponujajo veliko vgrajene funkcije za manipulacijo nizov.

Operacije na nizih

1) Vhodne funkcije

funkcija Opredelitev
getline() Ta funkcija se uporablja za shranjevanje toka znakov, kot jih vnese uporabnik v pomnilnik objekta.
porini nazaj() Ta funkcija se uporablja za vnos znaka na koncu niza.
pop_back() Ta funkcija, uvedena iz C++11 (za nize), se uporablja za brisanje zadnjega znaka iz niza.

primer:

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

>

linux preimenuj mapo

>

Izhod

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

Časovna zahtevnost: O(1)

Kompleksnost prostora: O(n) kjer je n velikost niza

2) Zmogljivostne funkcije

funkcija Opredelitev
zmogljivost() Ta funkcija vrne zmogljivost, dodeljeno nizu, ki je lahko enaka ali večja od velikosti niza. Dodaten prostor je dodeljen tako, da se lahko operacije izvajajo učinkovito, ko so v niz dodani novi znaki.
spremeni velikost () Ta funkcija spremeni velikost niza, velikost lahko povečate ali zmanjšate.
dolžina() Ta funkcija poišče dolžino niza.
shrink_to_fit() Ta funkcija zmanjša kapaciteto niza in jo izenači z minimalno zmogljivostjo niza. Ta operacija je uporabna za prihranek dodatnega pomnilnika, če smo prepričani, da ni treba več dodajati znakov.

primer:

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

>

>

Izhod

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>

Časovna zahtevnost: O(1)

Kompleksnost prostora: O(n) kjer je n velikost niza

3) Funkcije iteratorja

funkcija Opredelitev
začeti() Ta funkcija vrne iterator na začetek niza.
konec () Ta funkcija vrne iterator na naslednji konec niza.
rbegin() Ta funkcija vrne povratni iterator, ki kaže na konec niza.
render() Ta funkcija vrne povratni iterator, ki kaže na prejšnji ali začetek niza.
cbegin() Ta funkcija vrne stalni iterator, ki kaže na začetek niza, ni ga mogoče uporabiti za spreminjanje vsebine, na katero kaže.
nekaj() Ta funkcija vrne stalni iterator, ki kaže na naslednji konec niza, zato je ni mogoče uporabiti za spreminjanje vsebine, na katero kaže.
crbegin() Ta funkcija vrne stalni povratni iterator, ki kaže na konec niza, ni ga mogoče uporabiti za spreminjanje vsebine, na katero kaže.
crend() Ta funkcija vrne stalni povratni iterator, ki kaže na prejšnji ali začetek niza, ni ga mogoče uporabiti za spreminjanje vsebine, na katero kaže.

Algoritem:

  1. Deklarirajte niz
  2. Poskusite ponoviti niz z uporabo vseh vrst iteratorjev
  3. Poskusite spremeniti element niza.
  4. Prikažite vse ponovitve.

primer:

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)>

>

>

Izhod

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>

Časovna zahtevnost: O(1)

Kompleksnost prostora: O(n) kjer je n velikost niza

4) Manipulacijske funkcije:

funkcija Opredelitev
kopija (matrika znakov, len, pos) Ta funkcija kopira podniz v ciljnem nizu znakov, omenjenem v njenih argumentih. Za začetek kopiranja so potrebni 3 argumenti, ciljna matrika znakov, dolžina, ki jo je treba kopirati, in začetni položaj v nizu.
zamenjaj() Ta funkcija zamenja en niz z drugim

primer:

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

ukaz sed

>

>

Izhod

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>

Morati prebrati: Razred nizov C++ in njegove aplikacije