嗨,所以我是C的新手。
基本上我要问的是:
所以我有一个2-D char
数组,表示字符串列表(char array[size][20]
)。
然后我有另一个字符串,我将其表示为char
指向(char *word
)。
我希望我的函数做的是遍历数组中的每个字符串,如果它找到单词return 1
。
但我对指针很困惑,所以我不知道如何写这个。我开始只使用for循环,遍历数组的行。然后if(word = array[i]) return 1
。但这对我不起作用。
我希望这是有道理的,如果不是,我会再次尝试解释。我会非常感谢任何答案。我真的不需要代码。只是向正确的方向迈出了一步。
答案 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)
你给出的比较只是比较指针本身的值是否相等,而不是指针所指向的内存的内容是相同的(在你的例子中,单个相等)是作业,而非比较)。
你的数组真的看起来像我写的那个图:
您要做的是使用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]
绝对不是比较字符串的好方法。您应该使用strcmp
:http://www.cplusplus.com/reference/clibrary/cstring/strcmp/
我刚回答了另一个与你非常相似的问题。看看这个问题,它可以给你一些想法:Returning and printing string array index in C