2

嗨,我对 C 很陌生。

基本上我要问的是:

所以我有一个二维char数组,它代表一个字符串列表 ( char array[size][20])。

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

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

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

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

4

5 回答 5

5

假设您的数组由以空字符结尾的字符串(即长度最多为 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”,则找到该单词。

于 2012-10-30T22:50:29.160 回答
2

您给定的比较只是比较指针本身的值是否相等,而不是指针指向的内存内容是否相同(此外,在您的示例中,单个相等是分配,而不是比较)。

你的数组真的看起来像我草草写下的这张图: 字符数组的数组

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

在带有指针的语言中,它有助于像我在这里所做的那样提取内存,请记住,指针不是内存的实际内容,而只是定位它的一种方式。

于 2012-10-30T22:52:31.027 回答
1

这是 C,不是 C++。Using==将以数字方式比较字符串的地址,而不是它们的内容。要测试字符串是否相等,请使用该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 结尾的字符串,它将返回 1 。list

于 2012-10-30T22:51:05.660 回答
0

看一下中的函数string.h,具体来说strstr()

维基百科有一个相当不错的C 字符串处理页面。

于 2012-10-30T22:44:16.303 回答
0

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

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

于 2012-10-30T22:49:55.740 回答