首页 > 解决方案 > 字符串比较在 c 语言中没有按预期工作

问题描述

#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 并引发,但它返回所有字符串

标签: cstrtokstrcmp

解决方案


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

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);
}

推荐阅读