首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C中的二维字符数组中找到字符指针?

如何在C中的二维字符数组中找到字符指针?
EN

Stack Overflow用户
提问于 2012-10-31 06:41:23
回答 5查看 513关注 0票数 2

嗨,我是C语言的新手。

基本上我要问的是:

因此,我有一个表示字符串列表(char array[size][20])的二维char数组。

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

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

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

我希望这是有意义的,如果没有,我会尝试再次解释。如果您能给我答复,我将非常感谢。我真的不需要代码。只是朝着正确的方向迈出了一步。

EN

回答 5

Stack Overflow用户

发布于 2012-10-31 06:50:29

假设您的数组由以null结尾的字符串(即长度不超过19的字符串)组成,那么strcmp就是您的解决方案:

代码语言:javascript
复制
#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

使用:

代码语言:javascript
复制
char array[3][20] = { "Hello", "World", "Jim" };

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

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

票数 5
EN

Stack Overflow用户

发布于 2012-10-31 06:52:31

您给出的比较只是比较指针本身的值是否相等,而不是指针所指向的内存内容是否相同(同样,在您的示例中,单个相等是赋值,而不是比较)。

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2012-10-31 06:51:06

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

代码语言:javascript
复制
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;
}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13148643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档