Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

suzaco7

com implementação de Pilha

Recommended Posts

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.