2012-10-25 9 views
8

Sto usando strtok per dividere una stringa in token. Qualcuno conosce qualche funzione che conta effettivamente il numero di token?C'è un modo per contare i token in C?

Ho una stringa di comando e ho bisogno di dividerlo e passare gli argomenti a execve().

Grazie!

Modifica

execve prende argomenti char**, quindi bisogno di allocare una matrice di puntatori. Non so quanti destinatari senza sapere quanti token ci sono.

+9

'strtok () 'e incrementa un contatore? – alex

+1

E 'realloc' dovrebbe risolvere il problema di non conoscere le dimensioni in anticipo. –

risposta

8

Un approccio sarebbe semplicemente utilizzare strtok con un contatore. Tuttavia, ciò modificherà la stringa originale.

Un altro approccio è quello di utilizzare strchr in un ciclo, in questo modo:

int count = 0; 
char *ptr = s; 
while((ptr = strchr(ptr, ' ')) != NULL) { 
    count++; 
    ptr++; 
} 

Se si dispone di più delimitatori, utilizzare strpbrk:

while((ptr = strpbrk(ptr, " \t")) != NULL) ... 
+0

strchr() diventa ingombrante quando esistono più delimitatori di campo, ad esempio la punteggiatura. –

+0

In questo caso è possibile utilizzare 'strpbrk'. – nneonneo

+0

Corretto - solo non strchr(); –

3

Come numero di gettoni non è altro che una in più la frequenza di occorrenza del delimitatore utilizzato. Quindi la tua domanda si riduce per trovare no. dei tempi di occorrenza di un carattere in una stringa

dire il delimitatore utilizzati in funzione strtok in c è ''

int count =0,i; 
char str[20] = "some string here"; 

for(i=0;i<strlen(str);i++){ 
    if(str[i] == ' ') 
     count++; 
} 

Numero di gettoni sarebbe uguale valore + 1

+0

Fa il lavoro ma diventa ingombrante se è consentito più di un delimitatore. –

+0

Suppongo che possiamo usare la stessa procedura e dovremmo occuparci dei casi d'angolo – router

Problemi correlati