字符串比较在c语言中未按预期工作 #包括 #包括 int main(){ char str1[50]=“测试太阳升起”; char str2[4][90]={“sun”,“in”}; char delim[]=“”; char*ptr=strtok(str1,delim); while(ptr!=NULL){ int i=0; 对于(i=0;i

字符串比较在c语言中未按预期工作 #包括 #包括 int main(){ char str1[50]=“测试太阳升起”; char str2[4][90]={“sun”,“in”}; char delim[]=“”; char*ptr=strtok(str1,delim); while(ptr!=NULL){ int i=0; 对于(i=0;i,c,strtok,strcmp,C,Strtok,Strcmp,你需要调整你的测试if(-1)C为真,并且strcmp()不返回真或假,它返回一个正或负的数字,如果两个字符串匹配则返回零,这意味着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) 您可以在结果中看

你需要调整你的测试
if(-1)
C为真,并且
strcmp()
不返回真或假,它返回一个正或负的数字,如果两个字符串匹配则返回零,这意味着
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)
您可以在结果中看到
sun
的原因是:
sun
Test
raised
不匹配, 如果您试图查找不存在的字符串,请将代码更新为

#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; 
} 
intmain()
{
char str1[50]=“测试太阳升起”;
char str2[4][90]={“sun”,“in”};
char delim[]=“”;
char*ptr=strtok(str1,delim);
while(ptr!=NULL){
int i=0;
int=0;

对于(i=0;iAbove代码未按预期工作注意:strcmp(str2[i],ptr)在字符串不同时为真(非0)。Krishna Reddy CH,这就是您想要的吗?是的,我想要不同的字符串,但它不会出现“下面的代码应返回测试并引发,但它返回所有字符串。”很抱歉,这个语句没有任何意义。当“代码>!=0</CODE”时,“太阳”这个词似乎是匹配的,这意味着它没有找到,是因为其他字符串中的一个不匹配。考虑“<代码> STRCMP(STR2(2),PTR)<代码> >更改<代码>如果(STRCMP(STR2[i],PTR))< /C> >代码> >(STRCMP(STR2[i],PTR)=0)。
之后,您的程序输出
sun
。您是在尝试查找匹配项还是它不存在?使用
!=0
时可以看到sun的原因是,sun match wich-sun但与Test和raised=>不匹配,您将在结果中看到它我想要的字符串在str2数组中不存在
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);
}