2012-10-25 8 views
8

Ich verwende strtok, um eine Zeichenfolge in Token aufzuteilen. Kennt jemand eine Funktion, die tatsächlich die Anzahl der Token zählt?Gibt es eine Möglichkeit, Token in C zu zählen?

Ich habe eine Befehlszeichenfolge und ich muss es teilen und die Argumente an execve() übergeben.

Danke!

bearbeiten

execve nimmt Argumente als char**, so brauche ich ein Array von Zeigern zu vergeben. Ich weiß nicht, wie viele zuzuteilen sind, ohne zu wissen, wie viele Tokens da sind.

+9

'strtok gleiche wäre () 'und einen Zähler erhöhen? – alex

+1

Und 'realloc' sollte das Problem lösen, die Größe nicht im Voraus zu kennen. –

Antwort

8

Ein Ansatz wäre, einfach strtok mit einem Zähler zu verwenden. Dies ändert jedoch die ursprüngliche Zeichenfolge.

Ein weiterer Ansatz ist strchr in einer Schleife zu verwenden, etwa so:

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

Wenn Sie mehrere Trennzeichen haben, verwenden Sie strpbrk:

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

strchr() wird mühsam, wenn mehrere Feldtrennzeichen vorhanden sind, zum Beispiel Interpunktion. –

+0

Sie können 'strpbrk' in diesem Fall verwenden. – nneonneo

+0

Richtig - nur nicht strchr(); –

3

Als Anzahl von Token ist nichts anderes als ein mehr als die Häufigkeit des Auftretens des verwendeten Begrenzers. Deine Frage läuft also auf Nein hinaus. von Malen des Auftretens eines Zeichens in einer Zeichenkette

sagen, dass die Trennzeichen in strtok Funktion in C verwendet werden ''

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

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

Anzahl der Tokens als count + 1

+0

Wird der Job aber umständlich, wenn mehr als ein Trennzeichen zulässig ist. –

+0

Ich denke, wir können das gleiche Verfahren verwenden und sollten auf die Eckfälle achten – router