c - 字符串比较在 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 并引发,但它返回所有字符串
解决方案
你需要调整你的测试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不匹配,如果您正在尝试查找字符串不仅存在,请将您的代码更新为此sun
sun
Test
raised
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);
}
推荐阅读
- dart - 如何枚举 Stream 结果
- c - 在我的号码生成游戏中,我无法等待所有线程发送他们的号码
- mysql - 如果属性 x = "某事" 这样做
- python - Tensorflow ValueError 形状不兼容
- c++ - 将由输入文件确定的多个相同字符串(星号)串在一起。C++
- c++ - 使用两个 C++ 向量作为参数的“复杂”操作函数的最佳方法
- java - Spring + gradle 只编译一次然后在主类上抛出 ClassNotFoundException
- dataframe - 如何将 {{ds}} 气流宏转换为 DATE 数据类型
- android - 如何在 gomobile 中发出 HTTP 请求
- html - CSS 边距属性不适用于 Safari,但适用于其他浏览器