2012-10-25 21 views
8

Używam strtok, aby podzielić ciąg na tokeny. Czy ktokolwiek zna jakąś funkcję, która faktycznie liczy liczbę tokenów?Czy istnieje sposób liczenia tokenów w C?

Mam ciąg polecenia i muszę go podzielić i przekazać argumenty do execve().

Dzięki!

Edit

execve bierze argumenty char**, więc trzeba przeznaczyć tablicę wskaźników. Nie wiem, ile należy przydzielić, nie wiedząc, ile jest tokenów.

+9

'strtok () 'i zwiększyć licznik? – alex

+1

A 'realloc' powinien rozwiązać problem nie znając rozmiaru z góry. –

Odpowiedz

8

Jednym podejściem byłoby po prostu użycie strtok z licznikiem. Jednak spowoduje to modyfikację oryginalnego ciągu znaków.

Innym podejściem jest użycie strchr w pętli, tak jak poniżej:

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

Jeśli masz wiele ograniczników, należy strpbrk:

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

strchr() staje się nieporęczny, gdy istnieje wiele ograniczników pól, na przykład interpunkcja. –

+0

Możesz użyć 'strpbrk' w tym przypadku. – nneonneo

+0

Poprawnie - po prostu nie strchr(); –

3

Jako liczby żetonów jest tylko jeden więcej niż częstotliwość występowania użytego ogranicznika. Więc twoje pytanie sprowadza się do znalezienia nie. od czasów pojawienia się znaku w ciągu

powiedzieć separator używany w funkcji strtok w C jest „”

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

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

Ilość żetonów będzie taka sama jak zliczania + 1

+0

Wykonuje zadanie, ale staje się nieporęczne, jeśli dozwolone jest więcej niż jeden ogranicznik. –

+0

Myślę, że możemy użyć tej samej procedury i powinniśmy zająć się rogowymi skrzynkami – router

Powiązane problemy