在2D数组中搜索元素,C编程

时间:2014-12-29 16:38:44

标签: c arrays list

我是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;))。知道为什么它不执行上述声明吗? 谢谢!

6 个答案:

答案 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;
}