Salvarle dove?
Salvarle dove?
No MP tecnici (non rispondo nemmeno!), usa il forum.
Ogni singola parola in un array di char?
Valutane la lunghezza, alloca dinamicamente lo spazio per il vettore (più il carattere terminatore), copia la stringa.
No MP tecnici (non rispondo nemmeno!), usa il forum.
Non abbiamo fatto l'allocazione dinamica al corsoOriginariamente inviato da oregon
Valutane la lunghezza, alloca dinamicamente lo spazio per il vettore (più il carattere terminatore), copia la stringa.![]()
Altre soluzioni?
Per sapere se ci sono altre soluzioni valide, dovresti rispondere ai seguenti quesiti :
sai quante sono le parole (al massimo) presenti nella stringa?
sai quanto potrebbe essere lunga (al massimo) ogni parola?
Se non sai una delle due informazioni, allora è necessaria l'allocazione dinamica.
No MP tecnici (non rispondo nemmeno!), usa il forum.
Scusami, è che ci stò davvero perdendo la ragione. Sono 5 parole e la lunghezza l'ho impostata a 50. Questo è quello che ho scritto:Originariamente inviato da oregon
Per sapere se ci sono altre soluzioni valide, dovresti rispondere ai seguenti quesiti :
sai quante sono le parole (al massimo) presenti nella stringa?
sai quanto potrebbe essere lunga (al massimo) ogni parola?
Se non sai una delle due informazioni, allora è necessaria l'allocazione dinamica.
Riesco a stamparla singolarmente. Ma il problema è che dovrei leggerle da file e salvarle in un vettore parola per parola, escluso il carattere #.codice:#include <stdio.h> #include <string.h> #define N 50 int main(){ FILE *f; // Variabile per aprire il file char sep; // Carattere separatore: # char file[N]; // Stringa del nome del file da aprire char vettore[N]; // Vettore iniziale dove inserisco l'intera stringa con i # char parole[N][N]; // Vettore finale contenente le parole del file char *var; int i; printf("Inserire il separatore di stringhe: "); scanf("%c", &sep); printf("Inserire il nome del file da aprire: "); scanf("%s", &file); f=fopen(file, "r"); fscanf(f, "%s", &vettore); var=strtok(vettore, "#"); while(var!=NULL){ printf("%s\n", var); scanf("%s", &parole[i]); printf("%s\n", parole[i]); var=strtok(NULL, "#"); i++; } fclose(f); }
Come dice Oregon, ti tocca sapere quanto è lunga la stringa (supponiamo sia lunga N) e qual'è il numero massimo di parole che hai (supponiamo siano al massimo M parole).
Allora dichiari una matrice di char MxN e ci copi le varie stringhe.
Se invece non sai quante parole hai al massimo, ma sai la lunghezza massina di ogni parola, puoi contare i token dati dalla strtok con un contatore:
Per poi dichiarare una matrice di char ixN.codice:var=strtok(vettore, "#"); int i=1; while(var!=NULL){ var=strtok(NULL, "#"); i++; }
Però il problema è che ora devi richiamare di nuovo la strtok:
Comunque vadano le cose, sappi che non stai utilizzando l' algortimo più veloce, nemmeno quello migliore in termini di spazio occupato.codice:var=strtok(vettore, "#");
Una volta dichiarata la matrice con la strcpy copi i vari token nella matrice.
Se la dimensione delle parole non ha limite, ma glielo vuoi dare tu un limite, puoi usare fgets per stabilire di prendere in input stringhe con un numero massimo di caratteri.
Ok penso di aver capito. Ma l'algoritmo migliore per questo genere di cose qual'è?
Dovresti usare l' allocazione dinamica per non sprecare spazio.
Se hai una matrice ixN solo una stringa è lunga N, le altre sono più corte.
Invece con l' allocazione dinamica puoi avere un array di tante stringhe ognuna di lunghezza differente.I comandi per allocare sono calloc e malloc, quando li studi ti consiglio di rifarti questo esercizio usando l' allocazione dinamica.
Al secondo semestre dovrei studiarle, mi segno questo esercizioOriginariamente inviato da ramy89
Dovresti usare l' allocazione dinamica per non sprecare spazio.
Se hai una matrice ixN solo una stringa è lunga N, le altre sono più corte.
Invece con l' allocazione dinamica puoi avere un array di tante stringhe ognuna di lunghezza differente.I comandi per allocare sono calloc e malloc, quando li studi ti consiglio di rifarti questo esercizio usando l' allocazione dinamica.![]()