GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Verificar letra repetida


#1

Estou trabalhando neste código com um amigo, porem para finalizarmos está faltando verificar se as letras já foram digitadas e não contar, mas não estamos conseguindo se algum puder ajudar eu agradeço. pois sou iniciante na programação, desde já obrigado.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <time.h>
#include
#include
#include <windows.h>

using namespace std;

// estabelecendo estrutura para receber um caractere	
	typedef int tp_item;
	typedef struct tp_no {
		   char info[25];
		   struct tp_no *prox;
	} Lista;

//função que implementa o jogo
void jogo(){

// instanciado as variaveis
char palavra[25], letra[25], lacuna[25]; 
int vida = 2, x = 0 ,i ,u , total = 0 , cont = 0;
int str_aux;

//-----------------------------------------------------------------------

printf("                    ******************************");
printf("\n                            JOGO DA FORCA \n");
printf("                    ******************************\n");

printf("\n                             BOM JOGO\n\n");		

//-----------------------------------------------------------------------

//digitando a palavra secreta
printf("\nDIGITE UMA PALAVRA PARA CONTINUAR: \n");
gets(palavra); 
fflush(stdin);
total = strlen(palavra);	

//-----------------------------------------------------------------------

//verificando string e preenchenco com x
for(i=0;i<strlen(palavra);i++){ 
	lacuna[i]= 'x'; 
	//total++;// calculando total de letras
	  cont++;//letras restantes
} 		 

//------------------------------------------------------------------------

//verificando a quantidade de chances
while(vida >= 0 ){// vida <= total
 
printf("\nA PALAVRA COMTEM %d LETRAS\n", total);
printf("\nLETRAS RESTANTES: %i\n", cont);	

printf("\n%s\n ", lacuna); 
printf("\nENTRE COM UMA LETRA: "); 
gets(letra); 
system("cls");

//-------------------------------------------------------------------------

	//verificando se a letra já foi digitada

//---------------------------------------------------------------------------

// verificando letras restantes com a palavra digitada
for(i=0;i < strlen(palavra);i++){ 
	for(u=0 ;u < strlen(palavra); u++){
if(letra[u] == palavra[i]){ 
	lacuna[i] = palavra[i]; 
		x++; 
		cont--;
		}
	}
} 	

//---------------------------------------------------------------------------

//verificando se a quantidade de letra e igual a zero!.
if(cont == 0){			
	printf("PARABENS! VOCE VENCEU!");   
	printf("\nACERTOU A PALAVRA %s", palavra);		
	cont--;
	cont = 0;				
}

//-----------------------------------------------------------------------------

// verificando a quantidade de vida	
if( x == 0){ //x == 0		
	vida--;						
	printf("\nVOCE PERDEU UMA VIDA!\nVOCE TEM VIDA(S)"); 
	printf("RESTANTES %i\n\n " , vida + 1); 
	
	}		
	x = 0;
}						

//-----------------------------------------------------------------------------

printf("\n\nVC FOI ENFORCADO, Fim de jogo!\n\n\nPALAVRA SECRETA:"); 
printf("%s", palavra);

printf("\n\n***********************\n\n");
printf("* JOGO DA FORCA *\n\n");
printf(" ___ \n");
printf(" | | \n");
printf(" | O  \n");
printf(" |/|\ \n");
printf(" | |  \n");  
printf(" |/ \  \n");
printf(" |______ \n");
 printf("\n**********************\n");			

}

//-----------------------------------------------------------------------------

//criando lista   
void cria (Lista **L){
	*L=NULL;
}
//alocação do tamanho do vetor
void Ins_Inicio (Lista **L, char v[15]){
	Lista *p = (Lista *) calloc (1, sizeof(Lista));
	strcpy(p->info, v); 
	p->prox=*L;
	*L = p;
}

//-----------------------------------------------------------------------------
//função para imprimir a lista
void imprime (Lista L){
Lista
p;
p=L;
while (p != NULL){

    printf("%c-->", p->info);
    p=p->prox;
}

printf("NULL\n");
}

//------------------------------------------------------------------------------
//função que verifica a quantidades cadas na lista
void jogar (Lista *L){
int num, total_nos=0;
Lista *p;
p=L;
while (p!=NULL){

  total_nos++;
  p=p->prox;
}	
  int rand();
  num = rand() + (total_nos) + 1;
 while (p != NULL){ 
}

}

//-------------------------------------------------------------------------------
main(){

void tutoria();
char letra[25], lacuna[25];
int vida=6,x,i;

Lista *L;
int op, ret, fim;
char val[15];
cria(&L);

//--------------------------------------------------------------------------------
// chamando menu e opcao
do{

int clrscr();
puts(“1 - Jogar”);
puts(“0 - Sair”);
puts("\nDigite a opcao desejada");
scanf("%d", &op);
system(“cls”);
switch(op){

case 1: jogar(L); 
//função para esconder a letra digitada
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); 
DWORD mode = 0;
GetConsoleMode(hStdin, &mode);
SetConsoleMode(hStdin, mode & (~ENABLE_ECHO_INPUT));
string palavra;
getline(cin, palavra);   
fflush(stdin);    
    jogo();  
    fflush(stdin);        
    break;
    system("cls");        
}

}

while(op == 1);

}


#2

Não tenho muito conhecimento em c++, mas faria assim:

boolean letrasJaDigitadas[26]; // 26 letras no alfabeto ou ['z' - 'a' + 1]

char letraDigitada = 'b'; // teste
int indiceDaLetra = letraDigitada - 'a';

if (letrasJaDigitadas[indiceDaLetra]) {
  // já foi digitada
} else {
  // não foi digitada
  letrasJaDigitadas[indiceDaLetra] = true;
}