Strtok

Ryuzaky*
La funzione strtok, presente in string.h ha il seguente prototipo:

char *strtok(s,ct)

e restituisce in s i token delimitati dai caratteri di ct. Il mio dubbio è questo: ct deve essere necessariamente una stringa ?
Ho provato a dichiarare una variabile "separatore" ed usarla,dopo averla letta da tastiera, nella funzione con pessimi risultati. Lo stesso carattere invece letto come stringa funzionava correttamente e in più, dopo la fine della stringa stampata token per token mi viene stampato a video anche il testo " ".
E' possibile eliminare il " " ed utilizzare un singolo carattere anziché una stringa ?

Risposte
hamming_burst
bhe se guardi la definizione in string.h noterai che è dichiarata in questo modo:
char *strtok(char *str1, const char *str2);


penso che questo ti chiarisca il dubbio.
Comunque come hai definito e dichiarato la variabile separatore (il pattern) ed anche come lo hai filtrato se lo hai preso da input (ci può essere spazzatura se non è fatto a dovere).

E' possibile eliminare il " " ed utilizzare un singolo carattere anziché una stringa ?

la funzione richiede una stringa, domandati cos'è una stringa?

Ryuzaky*
"hamming_burst":

E' possibile eliminare il " " ed utilizzare un singolo carattere anziché una stringa ?

la funzione richiede una stringa, domandati cos'è una stringa?

Scusa, non ti seguo.

La dichiarazione di strtok che hai riportato tu è diversa da quella che porta il libro che uso (Ansi C di kernighan e ritchie). Dove posso trovare delle definizioni piu dettagliate ? Dalla tua dichiarazione immagino che la risposta alla mia domanda sia che bisogna necessariamente usare una stringa

hamming_burst
"Ryuzaky*":

La dichiarazione di strtok che hai riportato tu è diversa da quella che porta il libro che uso (Ansi C di kernighan e ritchie).

mi riporteresti la dichiarazione che è scritta su quel libro?

Dove posso trovare delle definizioni piu dettagliate ?

guugle è tuo amico per queste informazioni standardizzate :-)

Dalla tua dichiarazione immagino che la risposta alla mia domanda sia che bisogna necessariamente usare una stringa

una stringa è un insieme di caratteri con terminatore carattere '\0' (NULL)
quello che vuoi te è semplicemente una stringa di lunghezza 1 (non contando il carattere terminatore). cioè un insieme di un singolo carattere.

yoshiharu
"hamming_burst":
[quote="Ryuzaky*"]
La dichiarazione di strtok che hai riportato tu è diversa da quella che porta il libro che uso (Ansi C di kernighan e ritchie).

mi riporteresti la dichiarazione che è scritta su quel libro?
[/quote]

In effetti il K&R seconda edizione Prentice Hall a pagina 226-7 dice che il prototipo di strtok() e' esattamente quello che hai scritto tu:

char * strtok(s,ct)


laddove 's' e' il tipo char * e 'ct' e' il tipo const char *.

In giro con google ho anche trovato una implementazione in C di strtok(), dalla quale si evince che i delimitatori devono essere passati come una stringa, non come un carattere (vengono letti fino al '\0'), il che dovrebbe fugare ogni dubbio dell'OP.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.