suzaco7 0 Denunciar post Postado Dezembro 4, 2006 Boa tarde Pessoal será que vcs podem me ajudar a resolver este problema. Preciso fazer um programa em C que leia um arquivo HTML e leia no arquivo as TAGS Ex: <HTML>, <HEAD>, <TITLE>, etc. Então preciso colocá-las em uma pilha e então verificar se elas foram fechadas corretamente. Ex: </HTML>, </HEAD>, </TITLE>, etc. Tanho aqui c o código que criei mais não esta saindo corretamente: #include <stdio.h>#include <stdlib.h>void push(int valor);int pop(void);int size(void);int stacktop(void);int pilha[20];int pos = 0;void push(int valor){ pilha[pos] = valor; pos++; //Empilha um novo elemento. Não é verificado a capacidade máxima da pilha.}int pop(){ return (pilha[--pos]); //Retorna o elemento do topo da filha. Não é verificado o final da pilha.}int size(){ return pos; //Retorna o topo da pilha.}int stacktop(){ return pilha[pos]; //Retorna o elemento do topo da pilha sem desempilhar.}int main(int argc, char ** argv){ char linha[100]; char *result; FILE *fp; if(!(fp = fopen("arquivo.html", "r"))){ printf ("Erro na abertura do arquivo.\nFim de programa.\n"); exit(1); } else printf("Arquivo aberto com sucesso.\n"); while(!feof(fp)){ result = fgets(linha, 100, fp); while(*result){ if(*result == '<'){ push(result); printf("Colocado dados da pilha = %s\n", result); } if(*result == '<' && *(result + 1) == '/'){ printf("\nRetirado dados da pilha = %S\n", result); pop(); } result++; } } printf("\nTamanho da pilha %d\n", size()); system("pause");} Agradeço quem puder me ajudar. Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Dezembro 19, 2006 não está saindo corretamente porque voce está tentando empilhar uma STRING numa pilha de inteiros,uma dúvida, voce precisa que ele feche as tags corretamente ou só precisa contar as <tag> e as </tag>o último caso é bem mais fácil, voce está quase lá. Compartilhar este post Link para o post Compartilhar em outros sites
DiegoEP 0 Denunciar post Postado Janeiro 12, 2007 Esta pilha está meio incompleta, fiz uma biblioteca para pilha, você pode usa-la: int pop(pilha p);void push(pilha p,int valor);int estavazia(pilha p);pilha criapilha();typedef struct nodo{ int conteudo; struct nodo *proximo;} *nodo;typedef struct pilha{ nodo topo; }*pilha; int estavazia(pilha p){ if(p->topo == NULL) return TRUE; return FALSE; }void push(pilha p,int valor){ nodo aux=(nodo)malloc(sizeof(nodo)); aux->conteudo = valor; aux->proximo = p->topo; p->topo = aux;} int pop(pilha p){ nodo aux; int conteudo; if(estavazia(p)) { printf("PILHA VAZIA!\n"); return; } aux = p->topo; conteudo = aux->conteudo; p->topo = aux->proximo; free(aux); return conteudo; } pilha criapilha(){ pilha p = (pilha)malloc(sizeof(pilha)); p->topo = NULL; return p; } Compartilhar este post Link para o post Compartilhar em outros sites