C++ té en la seva definició una manera de representar a seqüència de caràcters com a objecte de la classe . Aquesta classe s'anomena std:: string. La classe string emmagatzema els caràcters com una seqüència de bytes amb la funcionalitat de permetre accés al caràcter d'un sol byte .
Matriu String vs Character
Corda | Char Array |
---|---|
Una corda és a classe que defineix els objectes que es representen com un corrent de personatges. | Una matriu de caràcters és simplement un matriu de caràcters que es pot acabar amb un caràcter nul. |
En el cas de les cordes, la memòria és assignat dinàmicament . Es pot assignar més memòria en temps d'execució sota demanda. Com que no hi ha memòria prèviament assignada, no es perd cap memòria . | La mida de la matriu de caràcters ha de ser assignat estàticament , no es pot assignar més memòria en temps d'execució si és necessari. No utilitzat assignat la memòria també es perd |
Com les cadenes es representen com a objectes, no array decay es produeix. | Hi ha un amenaça de decadència de matriu en el cas de la matriu de caràcters. |
Les cordes són més lentes en comparació amb la implementació que la matriu de caràcters. | Implementació de La matriu de caràcters és més ràpida than std:: string. |
La classe String defineix una sèrie de funcionalitats que permeten múltiples operacions sobre cordes. | Matrius de caràcters no ofereixin molts funcions incorporades per manipular cordes. |
Operacions sobre cadenes
1) Funcions d'entrada
Funció | Definició |
---|---|
getline() | Aquesta funció s'utilitza per emmagatzemar un flux de caràcters introduïts per l'usuari a la memòria d'objectes. |
fer retrocedir() | Aquesta funció s'utilitza per introduir un caràcter al final de la cadena. |
pop_back() | Introduïda des de C++11 (per a cadenes), aquesta funció s'utilitza per eliminar l'últim caràcter de la cadena. |
Exemple:
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;> }> |
>
>Sortida
The initial string is : The string after push_back operation is : s The string after pop_back operation is :>
Complexitat temporal: O(1)
Complexitat espacial: O(n) on n és la mida de la cadena
2) Funcions de capacitat
Funció | Definició |
---|---|
capacitat () | Aquesta funció retorna la capacitat assignada a la cadena, que pot ser igual o superior a la mida de la cadena. S'assigna espai addicional de manera que quan s'afegeixen els nous caràcters a la cadena, les operacions es poden fer de manera eficient. |
canviar la mida () | Aquesta funció canvia la mida de la cadena, la mida es pot augmentar o disminuir. |
llargada() | Aquesta funció troba la longitud de la cadena. |
reduir_per_ajustar() | Aquesta funció disminueix la capacitat de la cadena i la fa igual a la capacitat mínima de la cadena. Aquesta operació és útil per estalviar memòria addicional si estem segurs que no cal afegir més caràcters. |
Exemple:
CPP
Arraylist java sort
// 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;> }> |
>
>Sortida
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>
Complexitat temporal: O(1)
Complexitat espacial: O(n) on n és la mida de la cadena
3) Funcions d'iterador
Funció | Definició |
---|---|
començar () | Aquesta funció retorna un iterador al principi de la cadena. |
final() | Aquesta funció retorna un iterador al següent al final de la cadena. |
rbegin() | Aquesta funció retorna un iterador invers que apunta al final de la cadena. |
render () | Aquesta funció retorna un iterador invers que apunta a l'anterior o al començament de la cadena. |
cbegin() | Aquesta funció retorna un iterador constant que apunta al començament de la cadena, no es pot utilitzar per modificar el contingut al qual apunta. |
uns quants() | Aquesta funció retorna un iterador constant que apunta al següent o final de la cadena, no es pot utilitzar per modificar el contingut al qual apunta. |
crbegin() | Aquesta funció retorna un iterador invers constant que apunta al final de la cadena, no es pot utilitzar per modificar el contingut al qual apunta. |
crend() | Aquesta funció retorna un iterador invers constant que apunta a l'anterior o al començament de la cadena, no es pot utilitzar per modificar el contingut al qual apunta. |
Algorisme:
- Declarar una cadena
- Intenteu iterar la cadena utilitzant tot tipus d'iteradors
- Proveu de modificar l'element de la cadena.
- Mostra totes les iteracions.
Exemple:
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)> |
>
>Sortida
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>
Complexitat temporal: O(1)
Complexitat espacial: O(n) on n és la mida de la cadena
4) Funcions de manipulació:
Funció | Definició |
---|---|
copiar (matriu de caràcters, len, pos) | Aquesta funció copia la subcadena a la matriu de caràcters de destinació esmentada als seus arguments. Es necessiten 3 arguments, matriu de caràcters objectiu, longitud per copiar i posició inicial a la cadena per començar a copiar. |
intercanviar () | Aquesta funció intercanvia una cadena amb una altra |
Exemple:
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;> }> |
boto3
>
>Sortida
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>
Cal llegir: Classe String C++ i les seves aplicacions