Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - mcMario

#1
Me dejaron un trabajo que me parece un tanto complicado. Necesito conocimiento en varias cosas por lo que es algo complejo. El programa debe de leer un documento HTML. Después cada etiqueta del HTML debe guardarse en un nodo de un árbol, cada hijo del árbol debe ser una etiqueta inferior del HTML. De momento he logrado solamente leer una etiqueta, al momento de intentar guardar en un nodo me marca "Violación de segmento" (Como referencia uso ubuntu). Espero haberme explicado y espero que me responda alguien. Dejare la parte de código que tengo bien.

#include "arbol.h"

void main(){

FILE* archivo = fopen("arbol.html","r");
int c, i;
//char c;
char * buffer = NULL;
Arbol arbol;
arbol = arbol_crearArbol();
Nodo n;

c = fgetc(archivo);

if(c == '<'){
c = fgetc(archivo);
buffer = (char*)realloc(NULL, sizeof(char));
   i = 0;
   while( c != '>') {
      buffer[i] = c;
      i++;
      buffer = (char*)realloc(buffer, (i+1)*sizeof(char));
      c = fgetc(archivo);
      n = arbol_crearNodo(buffer);
      if(arbol.raiz == NULL){
      arbol.raiz = &n;
      }
      else{
      Nodo* aux = arbol.raiz;
      if(aux->hijo == NULL){
      n.hijo = &n;
      }
      else{
      aux = aux->hijo;
      }
     
      }
   }
      printf("%s\n", buffer); //La etiqueta queda guardada en buffer
}
}


///////////////////////////////////////////////////////////////////////////////////////////
/*Este es el arbol.h que hice*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct MiNodo{
char* dato;
struct MiNodo* hijo;
}Nodo;

typedef struct{
Nodo* raiz;
}Arbol;

Nodo arbol_crearNodo(char* dato){
Nodo n;
n.dato = dato;
n.hijo = malloc(sizeof(Nodo));
n.hijo = NULL;

return n;
}

Arbol arbol_crearArbol(){
Arbol a;
a.raiz = malloc(sizeof(Nodo*));
a.raiz = NULL;

return a;
}

void arbol_imprimir(Nodo n){
printf("%s\t", n.dato);
}

void arbol_imprimirPreorden(Nodo *n){
//raiz-izq-der
if( n != NULL){
arbol_imprimir(*n);
arbol_imprimirPreorden(n->hijo);
}
}



Mod: Los códigos deben ir en etiquetas GeSHi, los titulos deben ser descriptivos al problema