Mestre Gabriel Postado Setembro 19, 2006 Denunciar Share Postado Setembro 19, 2006 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:faculdadeescolaprofessorarquivo de saida deve ser assim?faculdade SIMescola nãoprofessor nãoeu 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 0int 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RIDES Postado Setembro 20, 2006 Denunciar Share Postado Setembro 20, 2006 você pode usar o strcmp(str1,str2)Alguns exemplos:http://www.java2s.com/Code/C/CatalogC.htm Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kandrade Postado Setembro 20, 2006 Denunciar Share Postado Setembro 20, 2006 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 stringforcando 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][][][][][][][][][][][] Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RIDES Postado Setembro 20, 2006 Denunciar Share Postado Setembro 20, 2006 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 stringforcando 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kandrade Postado Setembro 21, 2006 Denunciar Share Postado Setembro 21, 2006 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); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RIDES Postado Setembro 21, 2006 Denunciar Share Postado Setembro 21, 2006 Ai Kleber,Agradeço mais uma vez.Neste programa tirei muitas duvidas com relação ao uso do strlen();Valeu mesmo. Um abraço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Mestre Gabriel Postado Outubro 2, 2006 Autor Denunciar Share Postado Outubro 2, 2006 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kandrade Postado Outubro 3, 2006 Denunciar Share Postado Outubro 3, 2006 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Mestre Gabriel
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
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.