Jump to content

gostaria de saber a função letras[c-'a']++;


Simao Pedro27
 Share

Recommended Posts

boa tarde a todos, surgiu-me uma dúvida que gostaria de a ver dissipada,

gostaria de saber a função letras[c-'a']++;

 for(n=0; n<26; n++){ /* Este for faz com que os lugares todos do vector seja atribuido um zero*/
                letras[n]=0;
                }
                 printf("\nInsira uma palavra ou frase e termine com ponto final '.'\ne de seguida com <ENTER>:\n\n\n");
                 c=getchar(); /*A função getchar() lê um caracter e retorna um inteiro que é
                                   * o código do caracter, ou
                                   * o valor -1 que corresponde a fim de ficheirO, portanto põe em 'c' o codigo do respectivo caracter*/
                 while(c!='.'){
                      if((c>='a')&&(c<='z')){
                        letras[c-'a']++;
                      }
                
                      else{
                          if((c>='A')&&(c<='Z')){
                            letras[c-'A']++;
                          }
                          
                       }
                       c=getchar();
                  }
                       printf("\n----TABELA DE CONTAGEM CARACTERES----\n");
                       for(n=0; n<26; n++){
                          if(letras[n]>0){
                            printf("\t\t%c: %d\n",n+'A',letras[n]);
                          }
                       }    
                     printf("\nSe pretender continuar a contagem de caracteres, prima 1, para sair prima 0!\nOpcao: ");
                     scanf("%d",&opcao);
                     
       }while(opcao==1);
}
Link to comment
Share on other sites

letras[c-'a']++

1 - Lês o caracter c com o getchar;

2 - Se for uma letra minúscula, então faz os seguintes passos:

2.1 - Subtrai 'a' a c. O que isto faz é pegar no código ASCII do caracter guardado em c e subtrair-lhe o código ASCII do 'a' que é 97. O resultado será um número inteiro que estará entre 0 e 26 na notação decimal da tabela ASCII, ou seja, dar-te-á o índice numérico da letra do alfabeto que leste com o getchar. Ou seja, se leste o caracter 'b', vais fazer 'b'-'a' = 98-97 = 1, que corresponde ao índice da letra 'b' no alfabeto (índices a começar em 0). Portanto esse array letras será o array das letras do alfabeto.

2.2 - Dado que já tens a posição do array de letras referido, o que o ++ faz é incrementar em uma unidade o valor que lá existe.

Resumindo: isso permite registar no array de letras o número de ocorrências de cada letra minúscula.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.