Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda Com Um Caça Palavras


Guest --renatoes --

Pergunta

Guest --renatoes --

Olá pessoal. Estou com dúvida com um programa que preciso fazer para a disciplina de SO (uso de threads e tal). Estou desenvolvendo um caça palavras em C. Eis meu problema:

Tenho um arquivo que contém 16 linhas com 60 letras em cada linha. Preciso localizar uma palavra no arquivo e torná-la maiúscula, e então mandar para um arquivo de saída a mesma matriz com as palavras alteradas.

A manipulação das letras/ palavras é feita em uma matriz. O erro acontece justamente na função que deveria alocar a matriz. Esta função, chamada geraMatriz, possui uma variavel local chamada char** matriz. Aloco essa matriz desta forma:

matriz = (char**)malloc(sizeof(char *));
A matriz é então alocada. Depois, dentro de um for, leio cada linha do arquivo numa variável char frase[100], através do comando fgets. Funciona também. Neste mesmo for, faço o seguinte comando:
*(matriz+ contador) = frase

É aqui que começa o problema.

Quando imprimo cada frase apontada por *(matriz + contador), no método geraMatriz, tudo aparece normal. Mas esta função me retorna a matriz (a declaração da função é char** geraMatriz). Recebo a matriz resultante, no método main, através de uma variável chamada M, também do tipo char**. Quando tento imprimir o conteúdo da matriz M (o que é apontado por M), usando um laço de repetição do mesmo tipo utilizado na alocação da variável matriz, surge um erro.

Alguém poderia me esclarecer o que ocorre? Já tentei tornar M uma variável do tipo char*** mas continua dando erro.

Agradeço pela ajuda.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

A matriz é então alocada. Depois, dentro de um for, leio cada linha do arquivo numa variável char frase[100], através do comando fgets. Funciona também. Neste mesmo for, faço o seguinte comando:

*(matriz+ contador) = frase

É aqui que começa o problema.

é porque voce está tentando atribuir uma string em outra

o operador "=" não faz isso.

solucão: usar uma funcão de copia, por exemplo a strcpy()

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --renatoes --

Caro kandrade,

Sua idéia funcionou, mas quando tento imprimir os valores da matriz o programa imprime apenas a primeira linha. Estou postando o código.

matriz = (char **)malloc(linhas*sizeof(char *));
    for(; i < linhas+1; i++)
    {
       
       fgets(frase,colunas+2,fp);
       strcpy(*(matriz + i),frase);
       printf("%s",*(matriz+i));   --> imprime apenas a primeira linha
    }

Tem alguma idéia do que pode ser?

Obrigado novamente

Link para o comentário
Compartilhar em outros sites

  • 0

Lembrei que tenho login aqui hehe

Consegui resolver o problema de montar a matriz, agora estou com problema no algoritmo de busca e alteração de cada palavra

Quando altero uma palavra1 que contém a primeira letra de uma outra palavra2, não consigo modificar a palavra2. Estou postando o código de como faço a busca e alteração em palavras que estão no sentido horizontal para a direita (p. ex. entrada: processos saida: PROCESSOS)

Busca

case MOD_RIGHT: 
                          if(inicioC + t.tamanho-1 > 60) return 0; //se houver estouro no tamanho da matriz, FALHA
                           
                          for(; i < t.tamanho; i++){
                                
                                if(tolower(matriz[inicioL][distC++]) == t.palavra[i]) teste++; //testa se cada posição da matriz é igual a cada   letra da palavra; se for incrementa teste.
                          }
                          if(teste == t.tamanho) return 1;      //retorna SUCESSO e houve a localização da palavra
Alteração
case MOD_RIGHT: 
                      for(; k < dist; k++)
                      {
                          matriz[i][j] = toupper(matriz[i][j]); //deixa a letra em maiúscula
                          j++;
                      }

Agradeço pela ajuda

Link para o comentário
Compartilhar em outros sites

  • 0

Alteração

CODE

case MOD_RIGHT:

for(; k < dist; k++)

{

matriz[j] = toupper(matriz[j]); //deixa a letra em maiúscula

j++;

}

Agradeço pela ajuda

cara, só vendo todo o código pra analisar direito

voce mesmo pode ver se tem bugg no programa, verifique o valor das variaveis i e j na entrada do laco e verifique se elas estão com os valores esperados.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...