使用数组...无法找出错误

时间:2017-02-12 10:06:11

标签: c arrays

问题:写一个函数IndexOf,给定一个字符串s和一个字符c,返回s中第一次出现c的位置。如果c不在s中,则返回-1

#include <stdio.h>

int main(){
    char name = "Elham";
    char alph= 'a';
    printf("%d", IndexOf(name,alph));
}

int IndexOf(char s[], char c){

    int h = 0;

    while ( s[h] != '\0'){
        if (s[h] == c)
            return h;
        else if(s[h] == '\0')
            return -1;
        else 
            // Do nothing
        h++;
    }
}

错误:在第8行:8 [注意]具有默认促销的参数类型不能与空参数名称列表声明匹配

5 个答案:

答案 0 :(得分:1)

你还没有提到你得到的错误。但我看到了这些问题:

  1. 声明char name = "Elham";不正确。它应该是 char *name = "Elham";

  2. 代码中的if条件缺少括号。

  3. if s[h] == '\0' return -1;

    应该是:

    if (s[h] == '\0') return -1;

    希望这有帮助!

答案 1 :(得分:1)

您无法将字符串分配给char数据类型。

更改此行

char name = "Elham";

char* name = "Elham";

现在你应该这样做。

while ( s[h] != '\0'){
    if (s[h] == c) 
       return h;
    else if(s[h] == '\0')
        return -1;
    h++;
}

答案 2 :(得分:1)

只是为了扩展答案,提出几点建议:

1)您的版本仅限于可修改的字符串,使用const char *以接受任何(const和非const)字符串。

2)利用标准库的(优化)函数,在这种情况下strchr可以提供帮助:

#include <stdio.h>
#include <string.h>

static int IndexOf(const char *str, int chr)
{
    const char *ptr;

    return (ptr = strchr(str, chr)) ? (int)(ptr - str) : -1;
}

int main(void)
{
    char name[] = "Elham";
    char alph = 'a';

    printf("%d\n", IndexOf(name, alph));
    return 0;
}

答案 3 :(得分:0)

你的功能还可以。错误发生在main()函数中   变量name必须是char[],而不是char

正确代码:char name[] = "Elham";

答案 4 :(得分:0)

也许你发错了,但我认为你的意思是

char *name = "Elham";

insted of

char name = "Elham";