如何使用 strcmp_function

Posted

技术标签:

【中文标题】如何使用 strcmp_function【英文标题】:how can I use strcmp_function 【发布时间】:2013-06-22 14:15:18 【问题描述】:

我编写了一个用于在文本中查找特定单词的函数,但我有一个问题,我使用了 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;

【问题讨论】:

您的编译器错误究竟是什么?字符数组和字符指针在 C++ 中具有相同的签名。 strcmp 是 C,而不是 C++。它支持向后兼容。但是,如果你有std::string,为什么不使用字符串呢?它安全、基于 RAII(无新增/删除),并具有许多预定义的强大方法(包括 Coparison)。如果你使用字符串,你的代码就是一个简单的string1 == string2 【参考方案1】:

你为什么不尝试做类似的事情

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

你想有任何问题,因为你 strncmp 只是读取数组

【讨论】:

【参考方案2】:

你有这个功能:

  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;

&amp;str[0]是指向str1中第一个元素的指针,类型为char *

即您对 strcmp 的使用很好。 这应该回答你的问题 - 你也提到你有一个问题,但不是问题是什么或你打算做什么,所以....

【讨论】:

不过你用的语法不好。

以上是关于如何使用 strcmp_function的主要内容,如果未能解决你的问题,请参考以下文章

如果加入条件,我该如何解决。如果使用字符串连接,我如何使用

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?