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

Ajuda Por Favor


Mestre Gabriel

Pergunta

Pessoal, preciso escrever um porgrama que leia strings d um arquivo e as coloca numa lista encadeada.

Feito isso, o programa deve comparar cada uma das strings da lista encadeada e comparar com uma outra string chamada "palavra[100]".

Depois que fizer a comparação deve ser gravado num arquivo saida.txt os dados da lista encadeados seguidos de SIM ou não. por exemplo:

palavra[100] = "faculdade";

arquivo de entrada.txt é assim:

faculdade

escola

professor

arquivo de saida deve ser assim?

faculdade SIM

escola não

professor não

eu já fiz o codigo quase todo e só falta a parte de comparação (ultima parte). mas está dando tudo SIM.

vejam o meu codigo.

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#define Null 0

int main(){

char lexema[100];

char x[100];

int i;

struct node{

char num[100];

struct node *next;

} *start, *p;

start = NULL;

FILE *entra; // PONTEIRO PARA O ARQUIVO ENTRADA.TXT

FILE *sai; // PONTEIRO PARA O ARQUIVO SAIDA.TXT

strcpy (lexema,"teste");

entra = fopen("entrada.txt","r"); // ABRINDO ARQUIVO ENTRADA.TXT

// INSERINDO DADOS DO ARQUIVO NA LISTA ENCADEADA

while (!feof(entra)){

fgets(x,100,entra);

p = start;

start = (struct node *)malloc(sizeof(struct node));

for(i=0;i<20;i++)

start->num = x;

start->next = p;

} // TERMINO DA INSERÇÃO NA LISTA ENCADEADA.

sai = fopen("saida.txt","w");// ABRINDO ARQUIVO SAIDA.TXT

// PESQUISANDO NA LISTA ENCADEADA E GRAVANDO EM ARQUIVO DE SAÍDA

printf("\n\nGerado arquivo de saida!\n\n");

for (p > start; p != NULL; p = p->next){ // ANALISANDO ARQUIVOS DA LISTA ENCADEADA

if(strcmp(p->num,lexema)){

fprintf (sai, p->num);

fprintf(sai,"SIM\n");

}

else{

fprintf (sai, p->num);

fprintf(sai,"não\n");

}

}

// FIM DA ANÁLISE

system("PAUSE");

}

me ajudem por favor

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

strcmp retorna 0 se as strings forem iguais, portanto:

if(!strcmp(p->num,lexema)){
outra coisa que está ocorrendo em seu código é, nesse trecho:
for(i=0;i<20;i++)
   start->num[i] = x[i];

voce le 20 caracteres, mesmo que a string não tenha esse tamanho,

voce pode fazer uma lógica que, quando ele encontrar espaco em branco insere "\0" no final da string

forcando assim que a string faculdade por exemplo fique assim:

[f][a][c][l][d][a][d][e][\0]

e não assim:

[f][a][c][l][d][a][d][e][][][][][][][][][][][]

Link para o comentário
Compartilhar em outros sites

  • 0

Boa Noite,

voce le 20 caracteres, mesmo que a string não tenha esse tamanho,

voce pode fazer uma lógica que, quando ele encontrar espaco em branco insere "\0" no final da string

forcando assim que a string faculdade por exemplo fique assim:

[f][a][c][l][d][a][d][e][\0]

e não assim:

[f][a][c][l][d][a][d][e][][][][][][][][][][][]

Aproveitando o gancho, Kandrade.

Teria como seguir seu exemplo (faculdade), imprimir na tela cada letra em sua respectiva posição?

Ou seja, se for digitado a letra "d", seria impresso somente a letra "d" em suas posições e em branco esperando as demais a ser digitadas?

Agradeço desde já um retorno.

Link para o comentário
Compartilhar em outros sites

  • 0

acho que é isso que voce quer

#include <stdio.h>

int main(){

    char p[20]="faculdade\0",letra;
    char que[20];
    int len, i, cont=0;
    len=strlen(p);

    for(i=0;i<len;i++)
        que[i]=' ';
    que[i]='\0';

    printf ("Digite uma letra: ");
    letra=getchar();
    getchar();

    while ((letra!='0')&&(cont<len))
    {
        for(i=0;i<len;i++){
            if(p[i]==letra){
                if(p[i]!=que[i]){
                    que[i]=p[i];
                    cont++;
                }
            }
        }
        //printf("%i %i\n",cont, len);
        printf("%s\n",que);
        if(cont<len){
            printf ("Digite uma letra: ");
            letra=getchar();
            getchar();
       }
    }


   exit(0);
}

Link para o comentário
Compartilhar em outros sites

  • 0

Não era bem isso que eu estava precisando. Preciso usar lista encadeada e ler de arquivo.

E outra, o strcmp não funcionou..

Estou com problemas nessa parte, onde ele compara a palavra que está na variavel lexema (contem a palavra "tesoura") com uma palavra da lista encadeada(tem uma ocorrencia de "tesoura" na lista encadeada). Ele está imprimindo não para todos os resultado e deveria imprimir sim para uma ocorrencia.

não estou conseguindo implementar essa parte.. Ajuda eu aí. rs

for (p > start; p != NULL; p = p->next){ // ANALISANDO ARQUIVOS DA LISTA ENCADEADA
         
         if(!strcmp(p->num,lexema)){
            fprintf (sai, p->num);
            fprintf(sai,"SIM\n");
         }
         else{
              fprintf (sai, p->num);
              fprintf(sai,"não\n");     
              }
         }
         // FIM DA ANÁLISE

Link para o comentário
Compartilhar em outros sites

  • 0

debbuga seu código, faca assim:

for (p > start; p != NULL; p = p->next){ // ANALISANDO ARQUIVOS DA LISTA ENCADEADA
        
         if(!strcmp(p->num,lexema)){
            fprintf (sai, p->num);
            fprintf(sai,"SIM");
            printf("%s, %s são iguais", p->num, lexema);

         }
         else{
              fprintf (sai, p->num);
              fprintf(sai,"não\n");
              printf("%s, %s são diferentes", p->num, lexema);
              }
         }
         // FIM DA ANÁLISE

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,3k
    • Posts
      652,5k
×
×
  • Criar Novo...