我是C编程的菜鸟,我在制作字符串列表和搜索特定元素方面遇到了一些困难。
#include <stdio.h>
#include <string.h>
# define MAX 6
int main(){
char word[MAX];
char x[MAX][20];
int i;
strcpy(x[0], "One");
strcpy(x[1], "Two");
strcpy(x[2], "Three");
strcpy(x[3], "Four");
strcpy(x[4], "Five");
strcpy(x[5], "Six");
printf("%s", "Search:");
scanf("%s", word);
for (i=0; i<6; i++) {
if (x[i] == word) {
printf("%s", "Found a match!");
}
}
return 0;
}
它永远不会执行if
块中的语句(即printf(&#34;找到匹配!&#34;))。知道为什么它不执行上述声明吗?
谢谢!
答案 0 :(得分:8)
使用
if(strcmp(x[i],word) == 0)
printf("Found match\n");
==
不能用于比较字符串。
这只比较指针而不是字符串
答案 1 :(得分:6)
永远不会回来&#34;找到一场比赛!&#34;。知道为什么吗?
<强>原因:强>
在C中,数组名称被转换为指向其第一个元素的指针(在那里有一些例外)。 x[i] == word
正在比较两个指针,而不是比较strings
。由于两个数组的基址不同,因此比较返回false
值。
更正:
使用strcmp
比较两个字符串。
答案 2 :(得分:4)
此
if (x[i] == word)
应该是
if (strcmp(x[i], word) == 0)
答案 3 :(得分:1)
在ca预定义函数中存在于string.h库中,它是strcmp,如其他用户函数所述int strcmp(const char * str1,const char * str2)将指向bystr1的字符串与str2指向的字符串进行比较。你可以编写自己的函数来比较字符串并使用它。 我希望你从概念上理解为什么我们不能在c ++中使用==,因为c不包含像字符串类这样的东西(c纯粹是程序性的),所以你可以创建它的对象并使用它。因此c使用char用于表示字符串的数组。如果你检查你的代码x [i] == word比较char数组/字符串x [i],word的起始地址。我相信你理解这个概念。现在我想解释一下你可以在这里使用指针,即
if (*x[i] == *word)
printf("Found a match!");
工作正常,因为你可以理解,我们在这里通过指向他们的地址位置直接比较两个字符串。如果由于我在SO方面的经验不足而提供了不需要的信息,这是我在SO中的第一个答案。
答案 4 :(得分:0)
使用strcmp()
函数比较两个字符串。当两个字符串匹配时,其结果为0
。
所以你可以改变:
if ( ! strcmp(word,x[i]) ) // when match result will be `! 0 = 1`
printf("Found Match\n");
答案 5 :(得分:-3)
在C编程语言中,==运算符不用于比较字符串(正如其他人在我之前写的那样)。我建议尝试在C ++中使用一个名为string的非常好的功能。它构建在标准库中,通过这种方式,您可以使用==运算符进行比较。
#include <iostream>
using namespace std;
int main(void)
{
string a = "Apple";
if( a == "Apple" ) cout << "This is working" << endl;
}