Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
ciao stavo facendo un esercizio che dice: si consideri la seguente struttura
Codice sorgente - presumibilmente C++
typedefstruct 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
Codice sorgente - presumibilmente C++
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
typedefstruct 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);
return0;
}
nodo *creaLista(char*s)
{
nodo *testa;
nodo *nuovo;
int i,j,k;
testa=NULL;
for(i=0,j=0;s[i]!='\0';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]='\0';
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?
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
Codice sorgente - presumibilmente C++
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
typedefstruct 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);
return0;
}
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