我正在尝试创建一个具有两个参数的函数,单词和要在单词中搜索的字母。
这个词实际上是一个数组,其中每个字母都是数组的一个元素,例如对于单词" word",我们有以下内容: word = [w,o,r,d]。
因此我必须将word []的每个元素与字母进行比较,如果它们匹配,则函数应返回1,否则为0。 代码如下:
char ltt_srch(char word[], char ltt)//LINE 13
{
int len, i;
len = sizeof(word)/sizeof(word[0]);
for(i = 0; i < len; i++)
{
if(ltt == word[i])
{
return 1;
}
}
return 0;
}
我使用以下代码在main中调用ltt_srch
:
if(ltt_srch(word[len], ltt) == 0)//LINE 51
{
printf("Letter not found.\n");
}
但我得到一个警告和一个注释,特别是:
Line 13: [Note] Expected 'char *' but argument is of type 'char'
Line 51: [Warning] passing argument 1 of 'ltt_srch' makes pointer from integer without a cast
答案 0 :(得分:2)
问题是您传递word[len]
而不是word
作为第一个参数。如果您通过word[len]
,则会传递len
的索引word
上的字符,而不是word
本身。
例如,如果word = "word"
和len = 2
则word[len] == 'r'
。
解决方案:
if(ltt_srch(word, ltt) == 0)
代替if(ltt_srch(word[len], ltt) == 0)
。
答案 1 :(得分:0)
此:
len = sizeof(word)/sizeof(word[0]);
错了。你不能在函数中使用sizeof
来获取作为参数传递的数组的大小。
你的意思是:
const size_t len = strlen(word);
您需要搜索终结符,以使用C中的常规字符串。
你也称错了,这个:
ltt_srch(word[len], ltt)
正在订阅word
,这将产生一个字符,但你想传递数组本身,所以它应该是
ltt_srch(word, ltt)
最后,标准库已经具有此功能,查找strchr()
:
int ltt_srch(const char *word, chr ltt)
{
return strchr(word, ltt) != NULL;
}
答案 2 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
int ltt_srch(char word[], char ltt);
int
main(void) {
char *word = "word";
char key = 'r';
if (ltt_srch(word, key)) {
printf("Letter found.\n");
} else {
printf("Letter not found.\n");
}
return 0;
}
int
ltt_srch(char word[], char ltt) {
int i;
for(i = 0; word[i] != '\0'; i++) {
if(ltt == word[i]) {
return 1;
}
}
return 0;
}