-3

テキスト内の特定の単語を検索する関数を作成しましたが、問題があります。const char 引数を取得する strcmp_function を使用し、a[] は cons char ではありません。このプログラムでこの関数を使用するにはどうすればよいですか? (w は単語を意味します)

int comparision(const char sentence[ ],char *w)
{
int i, length=0, c=0, l=0;
int j,count=0;
char a[20]={'0'};
length= strlen(sentence);
l= strlen(w);
for (i=0; i<length; i++)
{
    if (sentence[i] == ' '||sentence[i] == '\t'||sentence[i] == '\n')   
    {
    for(j=0;j<l;j++)
        a[j]=sentence[j+i+1];
    a[j+1]='\0';
if( strcmp(a,w)==0)
    count++;
    }}
return count;
}
4

2 に答える 2

0

次のようなことを試してみませんか

   int i = 0;
   while (sentence[i] != '\0')
    {
      if (strncmp(&sentence[i], word, l) == 0)
         {
            count += 1;
            i += l;
         }
      else
          i += 1;
    }
    return (count);

strncmp は配列を読み取っただけなので、問題が発生したい

于 2013-06-22T14:34:40.617 に答える
0

この機能があります:

  int comparision(const char sentence[ ],char *w)

関数の引数リストでは、ここで行うように配列のような構文で宣言されたパラメーターは、実際にはポインターです。上記の関数宣言は、

int comparision(const char *sentence,char *w)

配列であったとしても、式として使用された場合の配列の名前は、配列の最初の要素へのポインターと同じであるため、問題なく機能します。

つまり、次のことができます。

char str1[] = "Hello";
char *str2  = "Hello";

int equal = strcmp(str1, str2) == 0;

str1 を strcmp に渡すとき、str1 はポインターに減衰すると言われているので、これはまったく同じです。

int equal = strcmp(&str1[0], str2) == 0;

&str[0]str1 の最初の要素へのポインタであり、次の型を持ちますchar *

つまり、strcmp の使用は問題ありません。これはあなたの質問に答えるはずです-あなたは問題があることにも言及していますが、問題が何であるか、またはあなたが何をしようとしているのかについては言及していません....

于 2013-06-22T14:20:17.463 に答える