C++ Básico Aula 06: Strings

 Imagem meramente ilustrativa

Recapitulando

    Vimos que umas das diferenças entre o C e o C++ é a existência do tipo de dados strings para armazenar cadeia de caracteres, o que dispensa a criação de um array unidimensional do tipo char como fazíamos na linguagem C. Relembrou?

    Agora que já vimos na aula passada o básico sobre POO podemos revelar que realidade o que o C++ possui é uma classe chamada string que permite essa manipulação de dados. 

    É importante entender que a string é uma classe porque ela vai fazer uso de alguns métodos ao invés de funções, por isso a sintaxe será um pouco diferente do que vimos até agora.

Trabalhando com Strings

    Na maioria dos exemplos de códigos disponíveis na Web, o aluno encontrará os programas com strings iniciando com a diretiva #include <string> para incluir a biblioteca especializada em cadeia de caracteres.

    No entanto, na maioria dos nossos testes com programas básicos em plataformas online e com o compilador G++ do Linux, comentar tal diretiva não teve efeito prático, mas vou mantê-la no nosso programa de exemplo.

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. int main () {
  6.   string nome = "Julio ";
  7.   string sobrenome = "Ribeiro";
  8.   cout << nome+sobrenome<<"\n";
  9.   cout<<"Outra forma de concatenar:\n";
  10.   string nomecompleto = nome.append(sobrenome);
  11.   cout << nomecompleto<<endl;
  12.   cout<<"Quantas letras tem o nome completo? ";
  13.   cout<<nomecompleto.length();
  14.   cout<<"\nOutra forma de ver o tamanho da string: ";
  15.   cout<<nomecompleto.size();
  16.   cout<<"\nPrimeira letra do nome: "<<nomecompleto[0];
  17.   cout<<"\nOutra forma de fazer isso: " << nomecompleto.at(0);
  18.   nomecompleto[0]='T';
  19.   cout<<"\nAlterei a primeira letra: "<<nomecompleto;
  20.   cout<<"\nUltima letra do nome: ";
  21.   cout << nomecompleto[nomecompleto.length() - 1];
  22.   return 0;
  23. }

    Colocamos no exemplo acima alguns recursos que o estudante, mais cedo ou mais tarde, vai precisar usar em C++. Como já falei, na linha 2 estou chamando a biblioteca para uso de strings.

    Na linha 6 e 7 instanciei a classe string criando dois objetos: nome e sobrenome e iniciei seus valores. Na linha 8 vemos como concatenar nome e sobrenome utilizando o operador +. Lembrando que <<"\n" está enviado para o objeto cout o caractere especial de quebra de linha.

    Convém esclarecer que muitas vezes precisaremos usar o caractere especial para a inclusão de caracteres usados em instruções. Por exemplo \' permite colocar um apostrofo na string. Da mesma forma \" permite colocar uma aspas e \\ permite coloca a barra \.

    Na linha 10 vemos o primeiro exemplo de uso de métodos da classe string com a instrução nome.append(sobrenome) onde estamos pedido adicionar o sobrenome ao nome. Uma alternativa ao uso da concatenação com o operador +.

  Já na linha 11 vemos o uso de <<endl como alternativa ao <<"\n", pois essa instrução envia um final de linha para o cout.

    Outro método da classe string que mostramos é o nomecompleto.length() que serve para ver o comprimento do objeto nomecompleto. O mesmo pode ser feito com nomecompleto.size() que mostra o tamanho da string.

    O interessante é que o C++ herda do C os recursos de manipulação de cadeia de caracteres, assim podemos tratar um objeto string como um array unidimensional e trabalhar com seus elementos. 

    Assim a instrução nomecompleto[0] da linha 16 permite pegar o primeiro elemento da matriz unidimensional nomecompleto, recuperando a primeira letra do nome.

    Na linha seguinte (17) temos uma alternativa a essa prática fazendo uso do método at() que também pega o primeiro caractere do objeto string com a instrução nomecompleto.at(0).

    Já na linha 18 vemos como alterar o primeiro elemento do array unidimensional. Repare que eu não estou usando "aspas", pois é necessário o uso de 'apostrofo' para se referir a um char.

    Por último vemos na linha 21 uma instrução mesclando a herança do C com os métodos do C++ ao utilizar um array unidimensional para pegar o último caractere do nome completo, fazendo uso da expressão nomecompleto.length() - 1 que significa tamanho da string -1 .

    Não listei aqui como o estudante transforma uma string em maiúsculo ou minúsculo, mas você pode consultar o material de linguagem C que o método mostrado lá continua valendo.

    Cabe esclarecer que em muito material de estudo pela Web o aluno encontrará exemplos de instanciamento dessa forma:

    string nome("Julio ");
    string sobrenome("Ribeiro");

    ... ao invés dessa:

    string nome = "Julio ";
    string sobrenome = "Ribeiro";

    Elas terão o mesmo efeito prático, mas utilizei a segunda forma porque me parece mais amigável para o estudante. Na devida hora falaremos mais a respeito.


Próxima Aula                                                                                                                        Aula Anterior

Referências

DEITEL, H. M. DEITEL, P. J. C++: Como programar. Pearson Education do Brasil. 2006.

GBDONLINE. Learn C++ Programming. Disponível em: <https://learn.onlinegdb.com/c%2B%2B_for_beginners> Acesso em 05 ago. 2024.

W3SCHOOLS. C++ Tutorial. Disponível em: <https://www.w3schools.com/cpp/default.asp> Acesso em 05 ago. 2024.