azz!
Ecco cosa si combina ad usare sempre std::string del C++ :tongue:
azz!
Ecco cosa si combina ad usare sempre std::string del C++ :tongue:
La stupidità umana e l'universo sono infinite.
Della seconda non sono certo(Einstein)
Gnu/Linux User
ci ho lavorato su:
Stampa a coppie cosi:codice:#include <stdio.h> #include <string.h> #include <assert.h> #include <malloc.h> #define DELETE(obj) free(obj); struct List { int el; struct List *next; }; void init(struct List *aux, int el); void add(struct List *aux, int el); void init(struct List *aux, int el) { assert(aux != NULL); aux->el = el; aux->next = NULL; } void add(struct List *aux, int el) { assert(aux != NULL); while(aux->next != NULL) aux = aux->next; struct List *tmp = (struct List *)malloc(sizeof(struct List)); tmp->el = el; tmp->next = NULL; aux->next = tmp; } void delete(struct List *aux) { while(aux != NULL) { DELETE(aux->next) } DELETE(aux) } int main(int argc, char *argv[]) { struct List *head = (struct List *)malloc (sizeof(struct List)); init(head, 0); short i, count = 0; for(i = 0; i <= 20; ++i) { add(head, i); } while(head != NULL) { printf("%d", head->el); head = head->next; if((count % 2) == 0) puts(""); else puts("\n"); ++count; } delete(head); puts("Press any key to exit..."); DELETE(head) char c; scanf("%s", &c); return 0; }
nn
nn
nn
nn
Basta modificarla un po e andra anche con i char
![]()
![]()
La stupidità umana e l'universo sono infinite.
Della seconda non sono certo(Einstein)
Gnu/Linux User
ho provato ha inizializzare la lista nel modo postato da "anx721"
tutto ok
poi nel main ho questo ciclo while :
codice:while(fgets(s,254,FileIn)) { if (strstr (s, par) != NULL) { struct List *head = (struct List *)malloc (sizeof(struct List)); init(head, s); // è giusto ? add(head, s); // è giusto ? while(head != NULL) { printf("%s\n", head->el); head = head->next; } y++; } else x++; }
Praticamente il mio ciclo while continua a sparare fuori S ovvero strighe diverse oppure uguali tra di loro e io vorrei metterle nella lista ...
ma mi si blocca al primo riultato e poi si impalla e non va più avanti ...
Se sapete aiutarmi vi ringrazio molto
CIAO e GRAZIE
Nel punto in cui hai scritto:
struct List *head = (struct List *)malloc (sizeof(struct List));
init(head, s); // è giusto ?
add(head, s); // è giusto ?
non è giusto, perchè le istruzioni
struct List *head = (struct List *)malloc (sizeof(struct List));
init(head, s);
vanno eseguite solo una volta, la prima volta che crei un elemento della lista, mentre le volte successive devi usare add(head, s); quindi aggiusta il codice mettendo la dichiarazione
struct List *head = NULL;
fuori dal while e sostituendo quelle tre righe che ho scritto sopra con:
codice://primo elemento inserito nella lsita if(head == NULL){ head = (struct List *)malloc (sizeof(struct List)); init(head, s); } else add(head, s);
Un altro errore sta nel ciclo while che effettua la stampa, perchè in quel ciclo modifichi la variabile head, che quindi dopo il ciclo non punta piu alla testa della lista, ma sarà NULL; in quel ciclo devi invece utilizzare un puntatore struct List *temp temporaneo che scorra la lista:
codice:temp = head; while(temp != NULL) { printf("%s\n", temp ->el); temp = temp ->next; }
Infine tieni presente che nell'esempio che ti ho dato io il campo el viene allocato come un puntatore a 100 caratteri, se devi leggere piu caratteri (254 indica il numero di caratteri che leggi ogni volta?) devi sostituire 100 con il numero di caratteri massimo che vuoi mettere in una stringa + 1 (ad esempio 255, se vuoi stringhe di 254 caratteri).
Il codice cosi modificato diventa:
codice:struct List *head = NULL; struct List *temp = NULL; while(fgets(s,254,FileIn)) { if (strstr (s, par) != NULL) { if(head == NULL){ head = (struct List *)malloc (sizeof(struct List)); init(head, s); } else add(head, s); temp = head; while(temp != NULL) { printf("%s\n", temp ->el); temp = temp ->next; } y++; } else x++; }
![]()
Ringraziamenti sinceri
Very good
CIAO E GRAZIE
ps
Non è ancora perfetto ma grazie ancora delle dritte
CIAO