Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Copiare parole in Array con strtok()
Forum - C/C++ - Copiare parole in Array con strtok()

Avatar
Danyez (Normal User)
Newbie


Messaggi: 15
Iscritto: 28/01/2010

Segnala al moderatore
Postato alle 20:46
Sabato, 22/01/2011
Salve, ragazzi.

Ho un progetto universitario per le mani, e non riesco a risolvere un problema che ormai non mi fa dormire la notte (lol).

Stò creando una function che estragga le parole contenute in una stringa. A questo proposito, ho deciso di usare strtok per trovare i separatori (" ") ed estrarmi le parole.

Codice :

Codice sorgente - presumibilmente C++

  1. int estraiparole(char *testo) {
  2. char parole[400];
  3. char *token;
  4. char separatore[1] = {" "};
  5. token=strtok(testo,separatore);
  6. int c=0;
  7. while (token!=NULL) {
  8.       parole[c]=*token;
  9.       c++;
  10.       token=strtok(NULL,separatore);
  11.      
  12. }
  13. //ciclo for inserito solo per controllare il mio lavoro
  14. int i;
  15. for (i=0;i<c;i++) {
  16.     printf("%c\n",parole[i]);
  17. }
  18. }



Il problema ? Mi stampa solo il primo carattere della parola, e non so se è un problema di memorizzazione o un problema di stampa ! (So che per stampare una stringa non dovrei usare %c ma %s, però spunta errore).


Ci stò lavorando da giorni, ma non ho mai tempo per applicarmi per bene e trovare l'errore (se di errore si parla !).

Il progetto mi impone di usare, oltre alle due librerie standard, solo la libreria string.h


Affido a Voi il problema, gente ! Grazie in anticipo. :)


http://danyez.net < Un mio piccolo blog di recente nascita.
PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 23:21
Sabato, 22/01/2011
c'é un errore e molto grosso. Indica che non hai compreso le stringhe ANSI C.

Allora,
Codice sorgente - presumibilmente C/C++

  1. char parole[400]

indica un array di 400 "caratteri". Un carattere è composto da un solo char.
Quando tu fai l'uguaglianza:

Codice sorgente - presumibilmente Plain Text

  1. parole[c]=*token;



prendi solo il primo carattere della stringa token, non tutta la stringa. Per questo motivo la %s della printf ti ritorna errore(un consiglio: se una funzione corretta di restituisce errore, non cambiare metodo perché così funziona, se ci sono errori ci sarà un motivo)

Per dichiarare un array di stringhe devi instanziare in questo modo:

Codice sorgente - presumibilmente C/C++

  1. char parole[400][x]; //con x = lunghezza parola



e utilizzare la strcpy per copiare la stringa contenuta in token.


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
PM Quote
Avatar
Danyez (Normal User)
Newbie


Messaggi: 15
Iscritto: 28/01/2010

Segnala al moderatore
Postato alle 12:32
Domenica, 23/01/2011
Era questo che cercavo, la dichiarazione di un Array di stringhe e non un array di caratteri. (mi ero reso conto che la dichiarazione era sbagliata, ma proprio non sapevo come dichiarare un array di stringhe).

Grazie mille. =)


http://danyez.net < Un mio piccolo blog di recente nascita.
PM Quote