classe std::string em C++
C++ tem em sua definição uma forma de representar um sequência de caracteres como objeto da classe . Esta classe é chamada std::string. A classe string armazena os caracteres como uma sequência de bytes com a funcionalidade de permitir acesso ao caractere de byte único .
String vs Matriz de Caracteres
| Corda | Matriz de caracteres |
|---|---|
| classe que define objetos que ser representado como um fluxo de caracteres. | Uma matriz de caracteres é simplesmente um matriz de caracteres que pode ser encerrado por um caractere nulo. |
| No caso de strings a memória é alocado dinamicamente . Mais memória pode ser alocada em tempo de execução sob demanda. Como nenhuma memória é pré-alocada nenhuma memória é desperdiçada . | O tamanho da matriz de caracteres deve ser alocado estaticamente mais memória não pode ser alocada em tempo de execução, se necessário. Alocado não utilizado memória também é desperdiçada |
| Como strings são representadas como objetos sem decaimento da matriz ocorre. | Existe um ameaça de decadência da matriz no caso da matriz de caracteres. |
| As cordas são mais lentas quando comparado à implementação do que à matriz de caracteres. | Implementação de matriz de caracteres é mais rápida do que std::string. |
| A classe String define uma série de funcionalidades que permitem múltiplas operações em strings. | Matrizes de caracteres não ofereça muitos funções integradas para manipular cordas. |
Operações em Strings
1) Funções de entrada
| Função | Definição |
|---|---|
| getline() | Esta função é usada para armazenar um fluxo de caracteres inseridos pelo usuário na memória do objeto. |
| push_back() | Esta função é usada para inserir um caractere no final da string. |
| pop_back() | Introduzida a partir do C++ 11 (para strings), esta função é usada para excluir o último caractere da string. |
Exemplo:
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 ; }
Saída
The initial string is : The string after push_back operation is : s The string after pop_back operation is :
Complexidade de tempo: O(1)
Complexidade Espacial: O(n) onde n é o tamanho da string
2) Funções de capacidade
| Função | Definição |
|---|---|
| capacidade() | Esta função retorna a capacidade alocada para a string que pode ser igual ou maior que o tamanho da string. Espaço adicional é alocado para que, quando novos caracteres forem adicionados à string, as operações possam ser realizadas com eficiência. |
| redimensionar() | Esta função altera o tamanho da string, o tamanho pode ser aumentado ou diminuído. |
| comprimento() | Esta função encontra o comprimento da string. |
| encolher_para_ajustar() | Esta função diminui a capacidade da string e a torna igual à capacidade mínima da string. Esta operação é útil para economizar memória adicional se tivermos certeza de que nenhuma adição adicional de caracteres será necessária. |
Exemplo:
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 ; }
Saída
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
Complexidade de tempo: O(1)
Complexidade Espacial: O(n) onde n é o tamanho da string
3) Funções Iteradoras
| Função | Definição |
|---|---|
| começar() | Esta função retorna um iterador para o início da string. |
| fim() | Esta função retorna um iterador próximo ao final da string. |
| rbegin() | Esta função retorna um iterador reverso apontando para o final da string. |
| Esta função retorna um iterador reverso apontando para o início anterior da string. | |
| cbegin() | Esta função retorna um iterador constante apontando para o início da string e não pode ser usado para modificar o conteúdo para o qual aponta. |
| um pouco() | Esta função retorna um iterador constante apontando para o próximo final da string e não pode ser usado para modificar o conteúdo para o qual aponta. |
| crbegin() | Esta função retorna um iterador reverso constante apontando para o final da string e não pode ser usado para modificar o conteúdo para o qual aponta. |
| crédito() | Esta função retorna um iterador reverso constante apontando para o início anterior da string e não pode ser usado para modificar o conteúdo para o qual aponta. |
Algoritmo:
- Declarar uma string
- Tente iterar a string usando todos os tipos de iteradores
- Tente modificar o elemento da string.
- Exibir todas as iterações.
Exemplo:
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)
Saída
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
Complexidade de tempo: O(1)
Complexidade Espacial: O(n) onde n é o tamanho da string
4) Manipulando Funções:
| Função | Definição |
|---|---|
| copy('matriz de caracteres' len pos) | Esta função copia a substring na matriz de caracteres de destino mencionada em seus argumentos. São necessários 3 argumentos, o comprimento da matriz de caracteres alvo para ser copiado e a posição inicial na string para iniciar a cópia. |
| trocar() | Esta função troca uma string por outra |
Exemplo:
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 ; }
Saída
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
Deve ler: Classe String C++ e suas aplicações