Oppure

Loading
23/05/11 17:19
ElCobra91
ciao stavo facendo un esercizio che dice: si consideri la seguente struttura
typedef struct Nodo{
                               char *str;
                               struct Nodo* next;
                                     }nodo;


si realizzi una funzione ch,ricevuta in ingresso una stringa contenente parole separate esattamente da uno spazio,crei una lista i cui nodi contengano le parole della stringa passata e ne restituisca la testa.
Il mio codice è questo
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>

typedef struct Nodo{
    char *str;
    struct Nodo *next;
   }nodo;

nodo *creaLista(char *);
void stampaLista(nodo *);

int main(int argc, char *argv[])
{
  nodo *first;
  char *string;
  int dim;
  
  first = NULL;
  
  printf("Inserisci l dimensione della tua stringa\n");
  scanf("%d",&dim);

  while(dim!=0){
    string=(char *)malloc(sizeof(char)*dim + 1);
    printf("Inserisci la stringa ");
    gets(string);
    first=creaLista(string);
    printf("Inserisci la dimensione della tua stringa");
    scanf("%d",&dim);
  }
 stampaLista(first);
 return 0;
}

nodo *creaLista(char *s)
{
  nodo *testa;
  nodo *nuovo;
  int i,j,k;
  testa=NULL;

  for(i=0,j=0;s[i]!='ciao stavo facendo un esercizio che dice: si consideri la seguente struttura

typedef struct Nodo{
                               char *str;
                               struct Nodo* next;
                                     }nodo;


si realizzi una funzione ch,ricevuta in ingresso una stringa contenente parole separate esattamente da uno spazio,crei una lista i cui nodi contengano le parole della stringa passata e ne restituisca la testa.
Il mio codice è questo
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>

typedef struct Nodo{
    char *str;
    struct Nodo *next;
   }nodo;

nodo *creaLista(char *);
void stampaLista(nodo *);

int main(int argc, char *argv[])
{
  nodo *first;
  char *string;
  int dim;
  
  first = NULL;
  
  printf("Inserisci l dimensione della tua stringa\n");
  scanf("%d",&dim);

  while(dim!=0){
    string=(char *)malloc(sizeof(char)*dim + 1);
    printf("Inserisci la stringa ");
    gets(string);
    first=creaLista(string);
    printf("Inserisci la dimensione della tua stringa");
    scanf("%d",&dim);
  }
 stampaLista(first);
 return 0;
}

nodo *creaLista(char *s)
{
  nodo *testa;
  nodo *nuovo;
  int i,j,k;
  testa=NULL;

  for(i=0,j=0;s[i]!='{parsed_message}';i++){
    if(s[i]==' '){
     nuovo=(nodo *)malloc(sizeof(nodo));
     nuovo->str=malloc(sizeof(char)*(i-j));
     for(k=0;j<i;j++,k++)
       nuovo->str[k]=s[j];
     nuovo->str[j]='{parsed_message}';
     nuovo->next=testa;
     testa=nuovo;
     } 
    
  }
 return testa;
}

void stampaLista(nodo *testa)
{
  nodo *tmp;
 
  for(tmp=testa;tmp!=NULL;tmp=tmp->next)
   printf("%s",tmp->str);
  return;
}
    
   
   
  
  


In pratica se inserisco una stringa di lunghezza 10 come "ciao mamma" dovrebbe creare due nodi uno con ciao e poi uno con mamma e poi dovrebbe stampare" mamma ciao" perchè inserisco in testa ogni nodo ma non succede nulla.Potete dirmi dove posso aver sbagliato?
';i++){ if(s[i]==' '){ nuovo=(nodo *)malloc(sizeof(nodo)); nuovo->str=malloc(sizeof(char)*(i-j)); for(k=0;j<i;j++,k++) nuovo->str[k]=s[j]; nuovo->str[j]='ciao stavo facendo un esercizio che dice: si consideri la seguente struttura
typedef struct Nodo{
                               char *str;
                               struct Nodo* next;
                                     }nodo;


si realizzi una funzione ch,ricevuta in ingresso una stringa contenente parole separate esattamente da uno spazio,crei una lista i cui nodi contengano le parole della stringa passata e ne restituisca la testa.
Il mio codice è questo
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>

typedef struct Nodo{
    char *str;
    struct Nodo *next;
   }nodo;

nodo *creaLista(char *);
void stampaLista(nodo *);

int main(int argc, char *argv[])
{
  nodo *first;
  char *string;
  int dim;
  
  first = NULL;
  
  printf("Inserisci l dimensione della tua stringa\n");
  scanf("%d",&dim);

  while(dim!=0){
    string=(char *)malloc(sizeof(char)*dim + 1);
    printf("Inserisci la stringa ");
    gets(string);
    first=creaLista(string);
    printf("Inserisci la dimensione della tua stringa");
    scanf("%d",&dim);
  }
 stampaLista(first);
 return 0;
}

nodo *creaLista(char *s)
{
  nodo *testa;
  nodo *nuovo;
  int i,j,k;
  testa=NULL;

  for(i=0,j=0;s[i]!='{parsed_message}';i++){
    if(s[i]==' '){
     nuovo=(nodo *)malloc(sizeof(nodo));
     nuovo->str=malloc(sizeof(char)*(i-j));
     for(k=0;j<i;j++,k++)
       nuovo->str[k]=s[j];
     nuovo->str[j]='{parsed_message}';
     nuovo->next=testa;
     testa=nuovo;
     } 
    
  }
 return testa;
}

void stampaLista(nodo *testa)
{
  nodo *tmp;
 
  for(tmp=testa;tmp!=NULL;tmp=tmp->next)
   printf("%s",tmp->str);
  return;
}
    
   
   
  
  


In pratica se inserisco una stringa di lunghezza 10 come "ciao mamma" dovrebbe creare due nodi uno con ciao e poi uno con mamma e poi dovrebbe stampare" mamma ciao" perchè inserisco in testa ogni nodo ma non succede nulla.Potete dirmi dove posso aver sbagliato?
'; nuovo->next=testa; testa=nuovo; } } return testa; } void stampaLista(nodo *testa) { nodo *tmp; for(tmp=testa;tmp!=NULL;tmp=tmp->next) printf("%s",tmp->str); return; }


In pratica se inserisco una stringa di lunghezza 10 come "ciao mamma" dovrebbe creare due nodi uno con ciao e poi uno con mamma e poi dovrebbe stampare" mamma ciao" perchè inserisco in testa ogni nodo ma non succede nulla.Potete dirmi dove posso aver sbagliato?
aaa
27/05/11 0:04
Ghost_M91W
potevi usare la funzione strtok per estrarre le parole dal testo, poi ad ogni chiamata alla funzione la testa veniva riazzerata per questo, credo, ti dava quel problema. Ho modificato un po' il tuo codice e sembra funzionare. Fammi sapere ;)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>

typedef struct Nodo{
    char *str;
    struct Nodo *next;
   }nodo;

nodo *creaLista(char *, nodo *);
void stampaLista(nodo *);

int main(int argc, char *argv[])
{
 nodo *first=calloc(1,sizeof(nodo));
 char *string;
 int dim;

 first = NULL;

 do{
    printf("Inserisci la dimensione della tua stringa: ");
    scanf("%d",&dim); fflush(stdin); dim++;
   }while(dim==0);

 string=(char *)malloc(sizeof(char)*dim + 1);
 printf("Inserisci la stringa: ");
 gets(string);
 first=creaLista(string,first);

 stampaLista(first);
 return 0;
}

nodo *creaLista(char *s, nodo *testa)
{
  nodo *nuovo; char *token; int len;
  token=strtok(s," "); len=strlen(token);
  nuovo=calloc(1,sizeof(nodo)); //aggiungo il primo nodo
  nuovo->str=token;
  testa=nuovo;
  while((token=strtok(NULL," "))!=0){nuovo=calloc(1,sizeof(nodo)); //aggiungo in testa gli altri nodi
                                     nuovo->str=token;
                                     nuovo->next=testa;
                                     testa=nuovo;
                                    }
 return testa; //restituisco la testa della lista
}

void stampaLista(nodo *testa)
{
  nodo *tmp;

  for(tmp=testa;tmp!=NULL;tmp=tmp->next) printf("%s\n",tmp->str);
}

aaa