-3

我编写了一个用于在文本中查找特定单词的函数,但我有一个问题,我使用 strcmp_function 获取 const char 参数,而 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 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 回答
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 回答