quarta-feira, 20 de dezembro de 2017

Problema de encontrar palavras-chave num texto ou string


Compartilhe!

O objetivo deste programa em C abaixo é decodificar o significado de um texto secreto que é mandado pela equipe que fornece informações de ataque para a base, que controla os canhões.

Dado um texto (uma string), deve-se percorrê-lo para encontrar quais palavras-chave estão presentes e informar a direção e elevação, de acordo com seus significados, para que o canhão da base seja direcionado. Pode-se haver mais de um par de dados, porém sempre estando na ordem: uma direção seguida de uma elevação.

Observações:
O programa deve ser case insensitive, ou seja, deve entender a letra maíuscula como igual à sua correspondente minúscula.

Palavras-chaves:
Direção
mercurio = N
venus = NE
terra = L
marte = SE
jupiter = S
saturno = SO
urano = O
netuno = NO

Elevação do canhão
verde = 30
amarelo = 45
vermelho = 60

#include <stdio.h>
#include <string.h>

int main(){
 
 char texto[1001];
 int i;

 while(scanf("%s", texto)!=EOF){//Ler palavra por palavra. Enquanto não chegar ao final do arquivo:
  
  //Verifica se uma letra (char) é minúscula ou maiúscula segundo a tabela ASCII:
  for(i = 0; texto[i] != '\0'; i++)
   if(texto[i] > 96 && texto[i] < 123)//(96 é '`' e 123 é '{') Se minúscula:
    texto[i] -= 32;//(32 é '[espaço]') Transforma em uma letra maiúscula. (Você precisa conhecer a tabela ASCII para saber os valores, e também poderia fazer algo assim: if(texto[i] >= 'a' && texto[i] <= 'z')

    //Ou:
    //if(texto[i] > 64 && texto[i] < 91)//Se maiúscula:
    //texto[i] += 32;//Transforma em uma letra minúscula
   
  //Agora compare a palavra e imprima na tela seu referente. Comparando as palavras chaves com a palavra da vez, esta convertida para maiúscula, utiliza-se a função strcmp() para a comparação:
  if (strcmp(texto, "MERCURIO")==0)
   printf("N - ");
  else if (strcmp(texto, "VENUS")==0) 
   printf("NE - ");
  else if (strcmp(texto, "TERRA")==0) 
   printf("L - ");
  else if (strcmp(texto, "MARTE")==0) 
   printf("SE - ");
  else if (strcmp(texto, "JUPITER")==0) 
   printf("S - ");
  else if (strcmp(texto, "SATURNO")==0) 
   printf("SO - ");
  else if (strcmp(texto, "URANO")==0) 
   printf("O - ");
  else if (strcmp(texto, "NETUNO")==0) 
   printf("NO - ");
  else if (strcmp(texto, "VERDE")==0) 
   printf("30\n");//Para elevações do canhão, após imprimir o valor, também pular linha.
  else if (strcmp(texto, "AMARELO")==0) 
   printf("45\n");
  else if (strcmp(texto, "VERMELHO")==0) 
   printf("60\n");

 }
 
 return 0;
}