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

di Anonimizzato27376 il
2 risposte
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

  • Luuukeeeee ha scritto:


    Inizialmente avevo pensato a strtok(), ma i token si fermano agli spazi in vari tentativi.
    Perché?

    http://www.cplusplus.com/reference/cstring/strtok

    Questo si ferma sugli spazi
    #include <stdio.h>
    #include <string.h>
    
    int main ()
    {
      char str[] ="- This, a sample string.";
      char * pch;
      printf ("Splitting string \"%s\" into tokens:\n",str);
      pch = strtok (str," ,.-");
      while (pch != NULL)
      {
        printf ("%s\n",pch);
        pch = strtok (NULL, " ,.-");
      }
      return 0;
    }
    Questo NON si ferma sugli spazi
    #include <stdio.h>
    #include <string.h>
    
    int main ()
    {
      char str[] ="- This, a sample string.";
      char * pch;
      printf ("Splitting string \"%s\" into tokens:\n",str);
      pch = strtok (str,",");
      while (pch != NULL)
      {
        printf ("%s\n",pch);
        pch = strtok (NULL, ",");
      }
      return 0;
    }
  • Si, erroneamentre quando acquisivo la stringa usavo scanf invece di fgets. Grazie mille dell'aiuto
Devi accedere o registrarti per scrivere nel forum
2 risposte