std::clase de cadena en C++
C++ tiene en su definición una forma de representar un secuencia de caracteres como objeto de la clase . Esta clase se llama std::string. La clase string almacena los caracteres como una secuencia de bytes con la funcionalidad de permitir acceso al carácter de un solo byte .
Cadena vs matriz de caracteres
| Cadena | Matriz de caracteres |
|---|---|
| Una cuerda es un clase que define objetos que se representará como una corriente de personajes. | Una matriz de caracteres es simplemente una variedad de personajes que puede terminar con un carácter nulo. |
| En el caso de las cadenas, la memoria es asignado dinámicamente . Se puede asignar más memoria en tiempo de ejecución según demanda. Como no hay memoria preasignada, no se desperdicia memoria . | El tamaño de la matriz de caracteres debe ser asignado estáticamente , no se puede asignar más memoria en tiempo de ejecución si es necesario. Asignado no utilizado La memoria también se desperdicia. |
| Como las cadenas se representan como objetos, no array decay ocurre. | Hay un amenaza de decaimiento de matriz en el caso de la matriz de caracteres. |
| Las cuerdas son más lentas. en comparación con la implementación que la matriz de caracteres. | Implementación de la matriz de caracteres es más rápida que std:: cadena. |
| La clase de cadena define una serie de funcionalidades que permiten múltiples operaciones sobre cadenas. | matrices de caracteres no ofrecer muchos funciones incorporadas para manipular cuerdas. |
Operaciones sobre cuerdas
1) Funciones de entrada
| Función | Definición |
|---|---|
| obtener línea() | Esta función se utiliza para almacenar un flujo de caracteres ingresados por el usuario en la memoria del objeto. |
| hacer retroceder() | Esta función se utiliza para ingresar un carácter al final de la cadena. |
| pop_back() | Introducida desde C++ 11 (para cadenas), esta función se utiliza para eliminar el último carácter de la cadena. |
Ejemplo:
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;> }> |
Producción
The initial string is : The string after push_back operation is : s The string after pop_back operation is :
Complejidad del tiempo: O(1)
Complejidad espacial: O (n) donde n es el tamaño de la cuerda
2) Funciones de capacidad
| Función | Definición |
|---|---|
| capacidad() | Esta función devuelve la capacidad asignada a la cadena, que puede ser igual o mayor que el tamaño de la cadena. Se asigna espacio adicional para que cuando se agreguen nuevos caracteres a la cadena, las operaciones se puedan realizar de manera eficiente. |
| cambiar tamaño() | Esta función cambia el tamaño de la cadena, el tamaño se puede aumentar o disminuir. |
| longitud() | Esta función encuentra la longitud de la cadena. |
| encoger_para_adaptar() | Esta función disminuye la capacidad de la cadena y la iguala a la capacidad mínima de la cadena. Esta operación es útil para ahorrar memoria adicional si estamos seguros de que no es necesario realizar más caracteres. |
Ejemplo:
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;> }> |
Producción
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
Complejidad del tiempo: O(1)
Complejidad espacial: O (n) donde n es el tamaño de la cuerda
3) Funciones de iterador
| Función | Definición |
|---|---|
| comenzar() | Esta función devuelve un iterador al principio de la cadena. |
| fin() | Esta función devuelve un iterador al final de la cadena. |
| comenzar() | Esta función devuelve un iterador inverso que apunta al final de la cadena. |
| prestar() | Esta función devuelve un iterador inverso que apunta al principio anterior de la cadena. |
| comenzar() | Esta función devuelve un iterador constante que apunta al comienzo de la cadena; no se puede utilizar para modificar el contenido al que apunta. |
| algunos() | Esta función devuelve un iterador constante que apunta al siguiente final de la cadena; no se puede utilizar para modificar el contenido al que apunta. |
| crbegin() | Esta función devuelve un iterador inverso constante que apunta al final de la cadena; no se puede utilizar para modificar el contenido al que apunta. |
| credo() | Esta función devuelve un iterador inverso constante que apunta al principio anterior de la cadena; no se puede utilizar para modificar el contenido al que apunta. |
Algoritmo:
- Declarar una cadena
- Intente iterar la cadena utilizando todo tipo de iteradores.
- Intente modificar el elemento de la cadena.
- Muestra todas las iteraciones.
Ejemplo:
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)> |
Producción
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
Complejidad del tiempo: O(1)
Complejidad espacial: O (n) donde n es el tamaño de la cuerda
4) Funciones de manipulación:
| Función | Definición |
|---|---|
| copiar (matriz de caracteres, len, pos) | Esta función copia la subcadena en la matriz de caracteres de destino mencionada en sus argumentos. Se necesitan 3 argumentos, la matriz de caracteres de destino, la longitud que se va a copiar y la posición inicial en la cadena para comenzar a copiar. |
| intercambio() | Esta función intercambia una cadena con otra. |
Ejemplo:
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;> }> |
Producción
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
Debe leer: Clase de cadena C++ y sus aplicaciones