Leggere in input stringa divisa da virgole con spazi nelle sottostringhe da acquisire.

di il
2 risposte

Leggere in input stringa divisa da virgole con spazi nelle sottostringhe da acquisire.

Salve a tutti, sono nuovo del forum e avevo una domanda.
Ho un problema che mi chiede di leggere una stringa separata da virgole con spazi nelle varie sottostringhe. dovrei realizzare un programma che legge con fgets la stringa e inserisce ogni sottostringa delimitata da virgola in un campo di un record. es input: 1234,il codice da vinci,leonardo da vinci--->dovrebbe mettere 1234 nel campo codice; il codice da vinci nel campo titolo e leonardo nel campo autore.
Inizialmente avevo pensato a strtok(), ma i token si fermano agli spazi in vari tentativi.
alla fine ho optato per questa opzione funzionante: Che ne pensate? E' una soluzione ottimale o mi sto complicando la vita inutilmente perchè esistono solizioni migliori? Ringrazio tutti anticipatamente.
//funzione che mi carica dati in un nodo di una lista

void caricaNodo(LibroPtr *nodo, char a[]){
int c=0, j=0;
(*nodo)->next=NULL;
int n=strlen(a);//lunghezza stringa passata come argomento
char b[234];//buffer dove copio i campi
for(int i=0; i<n; i++){
if((a!=',' && a!='\n')){//fgets termina sempre con \n
b[j]=a;
j++;
}
else{//fine campo
for(int t=j;j<n; j++)//cancello i caratteri letti prima che rimangono in b
b[t]='\0';
j=0;
c++;
if(c==1)
(*nodo)->ibsn=atoi(b);
if(c==2)
strcpy((*nodo)->titolo, b);
if(c==3)
strcpy((*nodo)->autore, b);
}
}
}

2 Risposte

Devi accedere o registrarti per scrivere nel forum
2 risposte