【问题标题】:compare a character on a char array by using strcmp使用 strcmp 比较 char 数组中的字符
【发布时间】:2013-07-14 12:56:21
【问题描述】:

我想使用 strcmp 在 char 数组中查找特定字符。例如,我想检测.在文本上的索引号。

char host[100] = "hello.world";
size_t i=0;
for(i=0;i<strlen(host);i++){
   if(strcmp(host[strlen(host)-i], ".")){
        printf("%d\n",i);
   }
}

但是,它输出"passing argument 1 of 'strcmp' makes pointer from integer without a cast "。我注意到 char 数组是一个 int,但我无法弄清楚我应该如何传递 char 索引。你能告诉我应该如何使用这个功能吗?

【问题讨论】:

  • 为什么要使用 strcmp 来完成该任务? this should be easier
  • 改为使用strchrstrcspn
  • 不知道那个功能,谢谢

标签: c char strcmp


【解决方案1】:

既然你想向后扫描字符串,你可以这样做:

char host[100] = "hello.world";
size_t ii=0;

for(ii=strlen(host); ii--;){
   if(host[ii] ==  '.') { // compare characters, not strings
        printf("%zu\n", ii);
   }
}

这还有一个额外的好处,那就是只调用一次strlen()(原始代码调用它N*(N-1) 次)

【讨论】:

    【解决方案2】:

    这一行:

    if(strcmp(host[strlen(host)-i], ".")){
    

    应该看起来像这样(添加和号,以将指针传递给 char 数组的元素):

    if(strcmp(&host[strlen(host)-i], ".")){
    

    不过,正如其他人已经指出的那样,strcmp 确实不是完成这项任务的最佳工具。您可以使用strchr 或仅将字符与“==”运算符进行比较,如果您喜欢滚动自己的循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-21
      相关资源
      最近更新 更多