13

strtok文字列をトークンに分割するために使用しています。トークンの数を実際にカウントする関数を知っている人はいますか?

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

ありがとう!

編集

execveとして引数を取るchar**ので、ポインターの配列を割り当てる必要があります。トークンがいくつあるかわからないと、いくつ割り当てればよいかわかりません。

4

3 に答える 3

10

1 つのアプローチは、単純strtokにカウンターで使用することです。ただし、元の文字列が変更されます。

別のアプローチはstrchr、次のようにループで使用することです。

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

複数の区切り文字がある場合は、次を使用しますstrpbrk

while((ptr = strpbrk(ptr, " \t")) != NULL) ...
于 2012-10-25T23:54:25.610 に答える
4

トークンの数は、使用される区切り文字の出現頻度よりも 1 つ多くなります。したがって、あなたの質問はノーを見つけることになります。文字列内の文字の出現回数

cのstrtok関数で使用される区切り文字は「 」であると言います

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

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

トークンの数は count+1 と同じになります

于 2014-10-15T14:39:46.640 に答える