c - 字符串比较在 C 语言中无法按预期工作

标签 c strtok strcmp

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

int main() { 
  char str1[50]="TEST sun raised";
  char str2[4][90]={"sun","in"};
  char delim[] = " ";

  char *ptr=strtok(str1,delim);
  while (ptr!=NULL) {

    int i=0;
    for (i=0; i<4; i++) {
      if(strcmp(str2[i],ptr)) {
        printf("%s\n",ptr);
        break;
      }
      else {   
      }
    }

    ptr=strtok(NULL,delim);
  }

  return 0; 
} 

下面的代码应该返回 Test 并引发,但它返回所有字符串

最佳答案

你需要调整你的测试 if(-1) C 为 true ,并且 strcmp() 不返回 true 或 false ,它返回一个正数或负数,如果两个字符串匹配则为零,这意味着 if(strcmp(str2[i],ptr) 始终为 true,除非 str2[i] 与 ptr 匹配,您可以使用类似的方法来解决此问题用于查找返回 true 的 if(strcmp(str2[i],ptr) == 0)if(!strcmp(str2[i],ptr)) 匹配项仅当 strcmp 返回 0 时,您的测试相当于 if(strcmp(str2[i],ptr) != 0) 您在结果中看到 sun 的原因是: sunTestraised 不匹配, 如果您试图查找不存在的字符串,请将您的代码更新为此

int main()
{
char str1[50]="TEST sun raised";
char str2[4][90]={"sun","in"};
char delim[] = " ";
 char *ptr=strtok(str1,delim);
 while(ptr!=NULL){
   int i=0;
   int found = 0;
   for( i=0;i<4;i++){
   if(strcmp(str2[i],ptr)==0){
         found++;
       break;
   }
}
if(found == 0) printf("%s does not exist \n",ptr);

ptr=strtok(NULL,delim);
}

关于c - 字符串比较在 C 语言中无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59129502/

相关文章:

c - 如何将 openssl 库与 arm-cross 编译器链接起来

c - 如何将 ECDSA SIG 签名转换为 C 中的字符数组

c - 标准 C 函数 atof 在与 strtok 一起使用时返回段错误

c - 使用strtok解析数据

c - strcmp 与字符串和数组混淆

PHP 在一个查询中检查另一个值

c++ - Pro*C 性能差异

c++ - unsigned char (*pArray[10][10])的含义;

c - 打印 strtok 标记时出现段错误

c - strcmp 在 c 中的 while 循环中不起作用