C - 在单词

时间:2016-12-14 11:45:58

标签: c arrays

我正在尝试创建一个具有两个参数的函数,单词和要在单词中搜索的字母。

这个词实际上是一个数组,其中每个字母都是数组的一个元素,例如对于单词" 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

3 个答案:

答案 0 :(得分:2)

问题是您传递word[len]而不是word作为第一个参数。如果您通过word[len],则会传递len的索引word上的字符,而不是word本身。

例如,如果word = "word"len = 2word[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;
}