C++ har i sin definition en måde at repræsentere en på rækkefølge af tegn som et objekt i klassen . Denne klasse kaldes std:: string. Strengeklassen gemmer tegnene som en sekvens af bytes med funktionaliteten at tillade adgang til enkeltbyte-tegnet .
String vs Character Array
| Snor skabelse af orakelbord | Char Array |
|---|---|
| En streng er en klasse, der definerer objekter der er repræsenteret som en strøm af karakterer. | En karakterarray er simpelthen en række af karakterer der kan afsluttes med et nul-tegn. |
| I tilfælde af strenge er hukommelse tildeles dynamisk . Mere hukommelse kan tildeles ved kørselstid efter behov. Da der ikke er forhåndstildelt hukommelse, ingen hukommelse er spildt . | Størrelsen på tegnarrayet skal være fordelt statisk , kan der ikke tildeles mere hukommelse ved kørsel, hvis det kræves. Ubrugt tildelt hukommelse er også spildt |
| Da strenge er repræsenteret som objekter, ingen matrix henfald opstår. | Der er en trussel om array henfald i tilfælde af tegnarrayet. |
| Strenge er langsommere sammenlignet med implementering end karakterarray. | Gennemførelse af karakterarray er hurtigere end std:: streng. |
| String klasse definerer en række funktioner der tillader manifold operationer på strenge. | Karakterarrays ikke tilbyde mange indbyggede funktioner at manipulere strenge. |
Operationer på strenge
1) Indgangsfunktioner
| Fungere | Definition |
|---|---|
| getline() | Denne funktion bruges til at gemme en strøm af tegn som indtastet af brugeren i objekthukommelsen. |
| skub tilbage() | Denne funktion bruges til at indtaste et tegn i slutningen af strengen. |
| pop_back() | Introduceret fra C++11(for strenge), bruges denne funktion til at slette det sidste tegn fra strengen. |
Eksempel:
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;> }> |
>
>Produktion
The initial string is : The string after push_back operation is : s The string after pop_back operation is :>
Tidskompleksitet: O(1)
Rumkompleksitet: O(n) hvor n er størrelsen af strengen
2) Kapacitetsfunktioner
| Fungere | Definition |
|---|---|
| kapacitet() | Denne funktion returnerer den kapacitet, der er allokeret til strengen, som kan være lig med eller mere end størrelsen af strengen. Yderligere plads er allokeret, så når de nye tegn tilføjes til strengen, kan operationerne udføres effektivt. |
| ændre størrelse() | Denne funktion ændrer størrelsen på strengen, størrelsen kan øges eller formindskes. |
| længde() | Denne funktion finder længden af strengen. |
| shrink_to_fit() | Denne funktion reducerer strengens kapacitet og gør den lig med strengens minimumskapacitet. Denne handling er nyttig for at spare yderligere hukommelse, hvis vi er sikre på, at der ikke skal tilføjes yderligere tegn. |
Eksempel:
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;> }> |
streng som array
>
>Produktion
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>
Tidskompleksitet: O(1)
Rumkompleksitet: O(n) hvor n er størrelsen af strengen
3) Iteratorfunktioner
| Fungere | Definition |
|---|---|
| begynde() | Denne funktion returnerer en iterator til begyndelsen af strengen. |
| ende() | Denne funktion returnerer en iterator til den næste til slutningen af strengen. |
| rbegin() | Denne funktion returnerer en omvendt iterator, der peger på slutningen af strengen. |
| render() | Denne funktion returnerer en omvendt iterator, der peger på den forrige eller begyndelsen af strengen. |
| cbegin() | Denne funktion returnerer en konstant iterator, der peger på begyndelsen af strengen, den kan ikke bruges til at ændre indholdet, den peger på. |
| nogle få() | Denne funktion returnerer en konstant iterator, der peger på den næste eller ende af strengen, den kan ikke bruges til at ændre indholdet, den peger på. |
| crbegin() | Denne funktion returnerer en konstant omvendt iterator, der peger på slutningen af strengen, den kan ikke bruges til at ændre indholdet, den peger på. |
| trosbekendelse() | Denne funktion returnerer en konstant omvendt iterator, der peger på den forrige eller begyndelsen af strengen, den kan ikke bruges til at ændre indholdet, den peger på. |
Algoritme:
- Erklære en streng
- Prøv at gentage strengen ved hjælp af alle typer iteratorer
- Prøv at ændre elementet i strengen.
- Vis alle iterationerne.
Eksempel:
CPP
hvor mange 0 i en milliard
// 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)> |
>
splitte en streng i c++
>Produktion
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>
Tidskompleksitet: O(1)
Rumkompleksitet: O(n) hvor n er størrelsen af strengen
4) Manipulerende funktioner:
| Fungere | Definition |
|---|---|
| kopi (char array, len, pos) | Denne funktion kopierer understrengen i måltegnarrayet nævnt i dens argumenter. Det kræver 3 argumenter, target char-array, længde at blive kopieret og startposition i strengen for at begynde at kopiere. |
| bytte rundt() | Denne funktion bytter en streng med en anden |
Eksempel:
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;> }> |
>
>Produktion
java indsættelse sortering
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>
Skal læses: C++ String Class og dens applikationer