• Domingo 15 de Diciembre de 2024, 19:07

Autor Tema:  De Fichero A Lista  (Leído 758 veces)

mackako_s

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
De Fichero A Lista
« en: Martes 1 de Junio de 2004, 08:08 »
0
en el buscar no se pq no me entra al if para comparar si esta o no esta la frase en la lista
si alguien me puede ayudar

a y si me pueden mandar un ejemplo o de donde sacar operaciones de lista con char (buscar, recorrer, imprimir, eliminar , borrar etc...)
gracias les dejo mi codigo.

pd: no olvidar colocar que archivo van a abrir

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

typedef struct _ListaDoble
{
   char reglon[120] ;
   struct _ListaDoble *sig , *ant ;
   int largo ;
}ListaDoble   ;


void muestra(ListaDoble *t);
int buscar(ListaDoble *L, char *s,int num);

ListaDoble   *Insertar(ListaDoble *L, char *s)
{
   if ( L == NULL )
     {

       L =  new ListaDoble ;
       L->largo = strlen(s);
       strcpy(L->reglon,s);
       L->sig = NULL ; L->ant = NULL ;
       return L;
     }
   else
     {
       L->sig = Insertar(L->sig,s);
       L->sig->ant = L ;
       return L;
     }
}


int main()
{char frase[50];
   FILE *fp;
   ListaDoble  *texto;
     ListaDoble  *L;
   char linea[740];
   char letra;
   int i;
   texto = NULL ;
   fp = fopen("c:\\pruebas.cpp","r");// puedes colocarle cualquier archivo
   i=0;
   while (  !feof(fp)  )
     {
   while ( (letra != '\n') && ( !feof(fp)))
          {
        fscanf(fp,"%c",&letra);
        linea[i++] = letra ;
           }
      linea='\0';
    letra = ' ';
    i=0;
   texto = Insertar(texto,linea);
     }
   fclose(fp);
     muestra(texto);
        gets(frase);
        printf("\n\n");
     buscar(texto, frase,0);
          printf("\n\n");
     
    muestra(texto);
     
getch();
  return 0;
}

int buscar(ListaDoble *L, char *s,int num)
{printf("%s",s);
if (L=NULL)                        
{printf("%d --> entro a buscar\n",num );
    if (L->reglon==s)
     printf("esta");
    return buscar(L->sig,s, num+1);
   
   
    }
   printf("no esta");
}
void muestra(ListaDoble *texto)
{
 
int num=1;
  while ( texto != NULL )
     {
        printf("%d --> %s",num,texto->reglon);  num++;
        texto = texto->sig;
     }
   
  }
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

nicokiki

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: De Fichero A Lista
« Respuesta #1 en: Martes 1 de Junio de 2004, 15:43 »
0
Hola!!!!!

Estuve ojeando el codigo y vi un par de cosas mal.

Código: Text
  1. ListaDoble *Insertar(ListaDoble *L, char *s)
  2. {
  3. if ( L == NULL )
  4. {
  5.  
  6. L = new ListaDoble&#59;
  7. L-&#62;largo = strlen(s);
  8. strcpy(L-&#62;reglon,s);
  9. L-&#62;sig = NULL&#59; L-&#62;ant = NULL&#59;
  10. return L;
  11. }
  12.  
  13.  

Deberia ser asi:

L->largo = strlen(s) + 1; //El strlen no cuenta el '\0'

Código: Text
  1. int buscar(ListaDoble *L, char *s,int num)
  2. {printf(&#34;%s&#34;,s);
  3. if (L=NULL)
  4. {printf(&#34;%d --&#62; entro a buscar&#092;n&#34;,num );
  5. if (L-&#62;reglon==s)
  6. printf(&#34;esta&#34;);
  7. return buscar(L-&#62;sig,s, num+1);
  8.  
  9.  

El (L->renglon == s) no existe salvo q uses string de la STL. Al usar char* deberias usar strcmp() . Esta funcion devuelve 0 si las cadenas son iguales.


Salu2!!!!!!!