如何在C中的二维char数组中找到一个char指针?

时间:2012-10-30 22:41:23

标签: c pointers

嗨,所以我是C的新手。

基本上我要问的是:

所以我有一个2-D char数组,表示字符串列表(char array[size][20])。

然后我有另一个字符串,我将其表示为char指向(char *word)。

我希望我的函数做的是遍历数组中的每个字符串,如果它找到单词return 1

但我对指针很困惑,所以我不知道如何写这个。我开始只使用for循环,遍历数组的行。然后if(word = array[i]) return 1。但这对我不起作用。

我希望这是有道理的,如果不是,我会再次尝试解释。我会非常感谢任何答案。我真的不需要代码。只是向正确的方向迈出了一步。

5 个答案:

答案 0 :(得分:5)

假设您的数组包含以null结尾的字符串(即长度最多为19的字符串),那么strcmp就是您的解决方案:

#include <string.h>
#include <stddef.h>

size_t find_in_array(char array[][20], size_t size, char * word)
{
    for (size_t i = 0; i != size; ++i)
        if (strcmp(array[i], word) == 0)
            return i;

    return size;
}

如果找到单词,则返回偏移量,否则返回size

<强>用法:

char array[3][20] = { "Hello", "World", "Jim" };

size_t i = find_in_array(array, 3, "Jim");  // returns "2"

如果“i!= 3”,就会找到这个词。

答案 1 :(得分:2)

你给出的比较只是比较指针本身的值是否相等,而不是指针所指向的内存的内容是相同的(在你的例子中,单个相等)是作业,而非比较)。

你的数组真的看起来像我写的那个图: Array of an array of characters

您要做的是使用strcmp或其他此类函数来比较word变量指向的内存等于数组中的任何单个字符串。

在带有指针的语言中,它有助于像我在这里一样绘制内存,并记住指针不是内存的实际内容,而只是一种定位它的方法。

答案 2 :(得分:1)

这是C,而不是C ++。使用==将以数字方式比较字符串的地址,而不是其内容。要测试字符串相等性,请使用strcmp()函数,如果参数的字符串相同,则返回0:

int has_word(const char *word, const char list[][20], size_t n)
{
    int i;
    for (i = 0; i < n; i++) {
        if (strcmp(word, list[i]) == 0) {
            return 1;
        }
    }
    return 0;
}

根据您的需要,如果在word字符串数组的第一个n元素中找到以0结尾的字符串list,则此函数将返回1。

答案 3 :(得分:0)

查看string.h中的功能,特别是strstr()

维基百科在C String Handling上有一个相当不错的页面。

答案 4 :(得分:0)

首先,word = array[i]绝对不是比较字符串的好方法。您应该使用strcmphttp://www.cplusplus.com/reference/clibrary/cstring/strcmp/

我刚回答了另一个与你非常相似的问题。看看这个问题,它可以给你一些想法:Returning and printing string array index in C