sexta-feira, 15 de maio de 2015

C++ trabalhando com String e funções de String.

Escreva um programa que leia um caractere digitado pelo usuário e uma frase também digitada pelo usuário e conte quantas vezes o caractere digitado aparece na frase. Por exemplo, se o usuário digitar 'a' e a frase “a aranha morreu.” seu programa deve retornar o número de letras 'a' contidos na frase, ou seja 4.

Primeiro minhas criticas ao sistema educacional.

Eu acho uma tremenda sacanagem dos professores de programação que, em sua maioria, jogam o assunto para o aluno ir buscar solução. Eu concordo com meu pai quando diz e repete sempre: num passado não tão distante, os professores primeiro ensinavam; depois passavam exercícios; tiravam as dúvidas; e por fim cobravam.

Hoje não é mais assim não! Não ensinam. Passam aos exercício a condição de INSTRUIR, ensinar, desenvolver o conteúdo no aluno. Como é que se aprende, se, quem sabe não está disposto e não tem o compromisso de ensinar?

Fim da crítica.

A solução para o problema proposto exige que o estudante da linguagem C estude e conheça:
  • As funções de String da linguagem.
  • Saber usar o For ou While;
  • Noções básicas de vetores
São estes três itens acima listados que você tem que estudar. Um bom livro para isto é Treinamento em Linguagem C++, volume 1 e volume 2. Se você quer uma cópia me peça nos comentários. Tudo tem um preço. Não envio nada de graça para ninguém. 
No livro acima citado, veja esta explicação sobre String em C++.
O que isto quer dizer para o iniciante? Na maioria das vezes NADA! Quem está iniciando não entende estes parágrafos acima. Então deixa eu explicar diferente. É o seguinte, quando você está programando em C++, e que declara uma variável do tipo Matriz ou Vetor de String, o C++ transforma a frase em uma série de caracteres. Deixa eu desenhar. Desenhando fica muito melhor.

Didaticamente é isto ai na imagem. Cada espaço em preto na imagem é o "caractere zero" que está no texto do livro. Em cada espaço preto, é um ZERO para dizer que ai termina um série e começa outra.

Outro ponto importante é a frase final: "Cada caractere é um elemento independente da matriz e pode ser acessado por meio de um índice." 
O código abaixo conta o  tamanho da frase digitada, e conta a quantidade de vogais 'a' ou 'A' digitada na frase.

 Explicação do código
  • As variável "char frase[100]" indica que está sendo criando uma matriz de caracteres que pode conter até 100 letras.
  • A variável contarA é de inteiro e vai contar na frase as vezes que a vogal 'a' foi digitada;
  • A variável i, é utilizada para percorrer a matriz frase[100] até o total que é obtido pela função strlen(frase);
  • A função strlen() faz parte das funções do C, e exige que o programado faça a chamada #include <string.h> no cabeçalho;
  •  A função gets(variável) é utilizada por que ela permite ESPAÇOS;
Como é que funciona?

 O programa pede que o usuário digite uma frase. O usuário digita. A instrução "tamanhoFrase = strlen(frase);" conta a quantidade ou o tamanho ou o total de letras digitadas pelo usuário. O máximo que é permitido é 100 letras. Poderia ser mais, evidente.

Obter este total será útil para o comando for (...) percorrer a matriz de zero até o tamanho da Frase. Veja o código:
for (i=0; i<tamanhoFrase; i++)
          {
            if ((frase[i] == 'a') || (frase[i] == 'A'))
                  contarA = contarA + 1;
          }  
Estas instruções do programa que é um laço de repetição do tipo for(...) começa com a variável i=0 e vai REPETIR até o tamanho da Frase, que foi obtido por strlen(frase). Então vem a condição if que que faz o seguinte:

- Se na variável frase[i] == 'a' OU na variável frase[i] == 'A' então, a variável contarA somará 1; Onde é que entra a variável i de frase[i]? Pra que é que serve este [i] entre colchetes?

A matriz de string frase[100] é transformada, didaticamente ilustrando, como está abaixo: Vê ali, onde é que entra a variável [i]? Olhe a seta vermelha. É! Ele é o que se chama de índice ou número da coluna, ou, quando em duas dimensões, poderá ser linhas.


Pegando este exemplo acima, a variável frase[i] quando começa, encontra a vogal 'e'; veja na imagem o valor de i que é 0,1,2,3,4,5,6 ... até 29,30,31. Ou seja, o tamanho desta frase é 32 caracteres com os espaços, e desta frase, olhe que tem a letra 'a' no índice, veja a seta vermelha que aponta o 'i' que está no for(i=0;....) nas seguintes casas: 3, 7, 25, 27 que totaliza 4 vezes a letra 'a'.

Terminando. O pedido é que o usuário irá digitar UMA LETRA e o programa vai contar a letra digitada. Veja estas mudanças.


O que é que tem de diferente? As funções toupper e tolower que servem para procurar a letra se está em minúsculo ou se existe a letra em Maiúsculo. A condição if usada no código acima significa o seguinte:

- SE em frase[i], ou seja, em frase[0] contiver toupper(buscarLetra), a letra digitada em minúsculo OU se em frase[i], ou seja, em frase[0] contiver tolower(buscarLetra), a letra digitada em maiúsculo... então, a variável contarA somará 1.

E o comando for (...) vai repetir esta ação até percorrer todas as posições da matriz.

Aproveite os exemplos acima e responda este outro exercício que tem aparecido em vários cursos.

Escreva um programa que leia uma frase (use a função gets( ) para ler a frase) e conte a quantidade de caracteres 'b' e caracteres 'e' contidos na frase digitada. Apresente também o número total de caracteres (usando a função strlen( ) ).


Nenhum comentário:

Postar um comentário