C++ ima u svojoj definiciji način predstavljanja a niz znakova kao objekt klase . Ova klasa se zove std::string. Klasa niza pohranjuje znakove kao niz bajtova s funkcionalnošću dopuštanja pristup jednobajtnom znaku .
String vs Character Array
Niz | Char Array |
|---|---|
| Niz je a klasa koja definira objekte koji se predstavljaju kao tok znakova. | Niz znakova je jednostavno niz znakova koji se može završiti nultim znakom. |
| U slučaju stringova memorija je dodijeljena dinamički . Više memorije može se dodijeliti tijekom izvođenja na zahtjev. Budući da memorija nije unaprijed dodijeljena ne gubi se memorija . | Veličina niza znakova mora biti statički dodijeljena više memorije ne može se dodijeliti tijekom izvođenja ako je potrebno. Neiskorišteno dodijeljeno memorija se također gubi |
| Kako su nizovi predstavljeni kao objekti nema raspada niza javlja se. | postoji prijetnja od array raspadanje u slučaju niza znakova. |
| Žice su sporije u usporedbi s implementacijom od niza znakova. | Provedba niz znakova je brži nego std:: niz. |
| String klasa definira niz funkcionalnosti koji dopuštaju višestruke operacije na nizovima. | Nizovi znakova ne nuditi mnogi ugrađene funkcije manipulirati žicama. |
Operacije na nizovima
1) Ulazne funkcije
| Funkcija | Definicija |
|---|---|
| getline() | Ova se funkcija koristi za pohranjivanje toka znakova koje je korisnik unio u memoriju objekta. |
| push_back() | Ova se funkcija koristi za unos znaka na kraju niza. |
| pop_back() | Uvedena iz C++11 (za nizove) ova se funkcija koristi za brisanje posljednjeg znaka iz niza. |
Primjer:
za petlju javaCPP
// 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; }
Izlaz
The initial string is : The string after push_back operation is : s The string after pop_back operation is :
Vremenska složenost: O(1)
Složenost prostora: O(n) gdje je n veličina niza
2) Funkcije kapaciteta
| Funkcija | Definicija |
|---|---|
| kapacitet() | Ova funkcija vraća kapacitet dodijeljen nizu koji može biti jednak ili veći od veličine niza. Dodatni prostor se dodjeljuje tako da kada se novi znakovi dodaju u niz, operacije mogu biti izvedene učinkovito. |
| promijeni veličinu() | Ova funkcija mijenja veličinu niza, veličina se može povećati ili smanjiti. |
| duljina () | Ova funkcija pronalazi duljinu niza. |
| skupi_da_stane() | Ova funkcija smanjuje kapacitet niza i čini ga jednakim minimalnom kapacitetu niza. Ova je operacija korisna za uštedu dodatne memorije ako smo sigurni da ne treba dodatno dodavati znakove. |
Primjer:
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; }
Izlaz
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
Vremenska složenost: O(1)
Složenost prostora: O(n) gdje je n veličina niza
3) Funkcije iteratora
| Funkcija | Definicija |
|---|---|
| početi() | Ova funkcija vraća iterator na početak niza. |
| kraj() | Ova funkcija vraća iterator na sljedeći kraj niza. |
| rbegin() | Ova funkcija vraća obrnuti iterator koji pokazuje na kraj niza. |
| render() | Ova funkcija vraća obrnuti iterator koji pokazuje na prethodni početak niza. |
| cbegin() | Ova funkcija vraća konstantni iterator koji pokazuje na početak niza koji se ne može koristiti za izmjenu sadržaja na koji pokazuje. |
| nekoliko() | Ova funkcija vraća konstantni iterator koji pokazuje na sljedeći kraj niza i ne može se koristiti za izmjenu sadržaja na koji pokazuje. |
| crbegin() | Ova funkcija vraća konstantni obrnuti iterator koji pokazuje na kraj niza koji se ne može koristiti za izmjenu sadržaja na koji pokazuje. |
| crend() | Ova funkcija vraća konstantni obrnuti iterator koji pokazuje na prethodni početak niza i ne može se koristiti za izmjenu sadržaja na koji pokazuje. |
Algoritam:
- Deklarirajte niz
- Pokušajte iterirati niz koristeći sve vrste iteratora
- Pokušajte modificirati element niza.
- Prikaz svih ponavljanja.
Primjer:
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)
Izlaz
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
Vremenska složenost: O(1)
Složenost prostora: O(n) gdje je n veličina niza
4) Manipulacijske funkcije:
| Funkcija | Definicija |
|---|---|
| kopija ('char array' len pos) | Ova funkcija kopira podniz u ciljnom nizu znakova spomenutom u svojim argumentima. Potrebna su 3 argumenta ciljna duljina niza znakova za kopiranje i početna pozicija u nizu za početak kopiranja. |
| zamijeniti () | Ova funkcija zamjenjuje jedan niz drugim |
Primjer:
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; }
Izlaz
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
Obavezno pročitati: C++ String klasa i njezine primjene