1

部分文字列を使用して、特定の単語が入力された回数をカウントしたいと考えています。コードを少しいじって、動作させることができるかどうかを確認しましたが、うまくいきません!

私のコードは次のとおりです。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

int main(int argc, char *argv[])
{

int i=0;

char buf[1026]={'\0'};
char *p="#EOF\n";
char *t;

while (strcmp(buf, p) != 0)
{
    fgets(buf, 1025, stdin);
    t=strtok(buf," , - \n");
    while(t != NULL)
    {
        if(strncmp(t, argv[1], strlen(argv[1])) == 0)
    {
        i++;
    }
    }
}






printf("%d\n", i);

return 0;
}

エラーはありませんが、の値iは常に 0 です。単語を 1 回見つけた後、カウントを継続する方法がわかりません。試しsizeof(t) < jましたが、うまくいきません。

4

2 に答える 2

2

トークンの複数のインスタンスを探している場合は、strtok を複数回呼び出す必要があります。後続の呼び出しでは、最初の引数として NULL を渡します。マニュアルページを参照してください

また、sizeof(t) は定数で、おそらく 4 または 8 です。t は char ポインターであり、ある程度のバイトを占有します。strtok が何かを返したかどうかを確認したい場合は、NULL と比較します。マニュアルページから:

戻り値

  The strtok() and strtok_r() functions return a pointer 
   to the next token, or  NULL  if there are no more tokens.

NULL は、その行にこれ以上トークンがないことを確認するためにチェックするものです。

また、トークンが 2 つの読み取りを橋渡しする場合、それを取得できないことに注意してください。たとえば、1行目は「,」で終わり、次の準備ができた行は「-\n」で始まります

于 2012-12-11T17:08:33.543 に答える
0
while(sizeof(t) > j)

sizeofは型のサイズを教えてくれるので、あなたの場合sizeof(char*)は です。これは、プラットフォーム上のポインターのサイズにすぎません。ほとんどの場合、常に 4 または 8 です。これを に置き換えますstrlen。これは、文字列のサイズを示すように設計されています。

于 2012-12-11T17:08:24.317 に答える