2012-10-25 5 views
8

私はstrtokを使って文字列をトークンに分割しています。実際にトークンの数を数える関数を知っている人はいますか?Cでトークンを数える方法はありますか?

私はコマンド文字列を持っており、それを分割して引数をexecve()に渡す必要があります。

ありがとうございます!

編集

execvechar**として引数を取りますので、私はポインタの配列を割り当てる必要があります。私はどれくらいのトークンがあるのか​​分からずにどれくらい割り当てるべきか分かりません。

+9

'はstrtok(同じであろう」と言う文字列内の文字の出現回数) 'を呼び出し、カウンタをインクリメントしますか? – alex

+1

そして 'realloc'はサイズを知らないという問題を解決するはずです。 –

答えて

8

1つの方法は、単にカウンタを使用してstrtokを使用することです。ただし、元の文字列が変更されます。

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

あなたが複数の区切り文字を持っている場合は、strpbrkを使用します:

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

複数のフィールド区切り文字(句読点など)がある場合、strchr()が煩雑になります。 –

+0

この場合、 'strpbrk'を使うことができます。 – nneonneo

+0

正解 - ちょうどstrchr()ではありません。 –

3

トークンの数がより多くの1に過ぎないとして

別のアプローチは、そうのように、ループ内でstrchrを使用することです使用されるデリミタの出現頻度。だから、あなたの質問は嫌になるよ。

はc strtok関数で使用される区切り文字は「トークンの

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

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

号カウント+ 1

+0

ジョブは処理しますが、複数の区切り文字が許可されていると面倒です。 –

+0

私は同じ手順を使うことができると思いますし、コーナーケースを処理する必要があります – router

関連する問題