嗨,我是C语言的新手。
基本上我要问的是:
因此,我有一个表示字符串列表(char array[size][20]
)的二维char
数组。
然后我有了另一个字符串,我将其表示为指向的( char
) (char *word
)。
我想要我的函数做的是,遍历数组中的每个字符串,如果它找到单词to return 1
。
然而,我对指针感到很困惑,所以我不确定如何写这个。我从使用for循环开始,遍历数组的各行。然后是if(word = array[i]) return 1
。但这对我不起作用。
我希望这是有意义的,如果没有,我会尝试再次解释。如果您能给我答复,我将非常感谢。我真的不需要代码。只是朝着正确的方向迈出了一步。
发布于 2012-10-30 22:50:29
假设您的数组由以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“,就会找到这个词。
发布于 2012-10-30 22:52:31
您给出的比较只是比较指针本身的值是否相等,而不是指针所指向的内存内容是否相同(同样,在您的示例中,单个相等是赋值,而不是比较)。
你的数组看起来真的像我草草写下的这个图:
您想要做的是使用strcmp或其他类似的函数来比较您的word变量所指向的内存是否等于数组中的任何单个字符串。
在带有指针的语言中,像我在这里所做的那样,它有助于提取内存,并记住指针并不是内存的实际内容,而只是定位它的一种方式。
发布于 2012-10-30 22:51:06
这是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;
}
根据您的需要,如果此函数在字符串数组list
的前几个n
元素中找到以0结尾的字符串word
,则返回1。
https://stackoverflow.com/questions/13148643
复制相似问题