Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

tfguitar

Tradutor em C

Recommended Posts

Estou fazendo um mini-tradutor ingles português, até a hora que ele recebe uma frase ou expressão e compara com a palavra está dando certo... mas na hora de mostrar a palavra traduzida não mostra, e não sei mais o que tentar.... Segue o uma parte código para analisarem valew..

 

#include<stdio.h>#include<conio.h>#include<string.h>int main(){	char Ln[256], *p, atomo[256], trad[256];	int i = 0, x = 1, j, c;		for(c=0;c<256;c++)  [b]//limpa os vetores[/b]	{			Ln[c] =0;		atomo[c] =0;		trad[c] =0;	}	while (!feof(stdin)) [b]//lê letra por lentra e forma uma string[/b]	{		printf("\nDigite uma palavra ou expressгo a ser traduzida: \n");		fgets(Ln,255,stdin);		if(!feof(stdin))		{		  p=Ln;		  while(*p)		  {			if(*p!=' ')			{			j=0;			while(*p && *p!=' ' && p!=13 && p!=10)			{					atomo[j]=*p;					j++;					p++;									atomo[j]= '\0';						  				if(strcmp(atomo,"i")==0) [b]//se for "palavra em ingles" [/b]					strcat(trad,"eu "); [b]//concatena "palavra traduzida" no fim da frase de traducao[/b]				else if(strcmp(atomo,"am")==0)					strcat(trad,"estou ");				else if(strcmp(atomo,"crazy")==0)					strcat(trad,"maluco ");			}			p++;			 }		  }		   }		}	printf("\n\nTraducao: %s",*trad);[b]	 //aki era pra imprimir a frase traduzida....[/b]}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu só retirei este pedaço

while (!feof(stdin)) [b]//lê letra por lentra e forma uma string[/b]	{
(e logicamente o fecha chaves lá embaixo)

while(*p && *p!=' ' && p!=13 && p!=10)
Eu não entendi a comparação p!=13 && p!=10 e retirei também.

(Ela estava gerando um erro já que p é um ponteiro e está sendo comparado com um inteiro)

 

Depois disso o programa funcionou perfeito para a entrada "i am crazy".

 

Como ficou:

#include<stdio.h>#include<string.h>int main(){	char Ln[256], *p, atomo[256], trad[256];	int i = 0, x = 1, j, c;		for(c=0;c<256;c++)  //limpa os vetores	{		Ln[c] =0;		atomo[c] =0;		trad[c] =0;	}		printf("\nDigite uma palavra ou expressao a ser traduzida: \n");		fgets(Ln,255,stdin);		if(!feof(stdin))		{		  p=Ln;		  while(*p)		  {		if(*p!=' ')		{			j=0;			while(*p && *p!=' '/* && p!=13 && p!=10*/)			{					atomo[j]=*p;					j++;					p++;									atomo[j]= '\0';				if(strcmp(atomo,"i")==0) //se for "palavra em ingles"					strcat(trad,"eu "); //concatena "palavra traduzida" no fim da frase de traducao				else if(strcmp(atomo,"am")==0)					strcat(trad,"estou ");				else if(strcmp(atomo,"crazy")==0)					strcat(trad,"maluco ");			}			p++;		}	}}	printf("\n\nTraducao: %s",trad);}
No final aqui eu tirei o "*" de trad, já que você vai imprimir a string.

Compartilhar este post


Link para o post
Compartilhar em outros sites

valew grande... funcionou perfeito....agora mais uma duvida pois eu me eskeci.....

 

queria que se não tivesse uma palavra compatível, ele sairia do loop de comparações e mostrasse

 

printf("Palavra indísponivel no tradutor: %s", atomo);

mas como fazer um comando de parada....

 

seria o break ???????

 

valewwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, pode-se utilizar o break.

Outra coisa seria colocar um indicador de que houve o erro antes de colocar o break, aí no final do programa você põe um if para imprimir a mensagem de erro ou simplesmente finalizar o programa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

skimo-solar, valew pela força... o brake não quis funcionar, mas isso num é tão importante....

 

 

 

outro problema que achei e não consigo resolver é no caso:

 

else if(strcmp(atomo,"goal")==0)	strcat(trad,"gol ");  else if(strcmp(atomo,"go")==0)	strcat(trad,"fui ");
aew com o programa em execução se eu peço a tradução de go, ele me mostra fui, agora se eu peço a tradução de goal ele mostra a tradução fui goal....

 

 

você sabe como eu posso resolver isso ?????

Compartilhar este post


Link para o post
Compartilhar em outros sites

É... você vai ter alguns problemas já que as palavras podem ter mais de um significado.A solução é analisar o contexto, não palavras individualmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.