问题:写一个函数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 [注意]具有默认促销的参数类型不能与空参数名称列表声明匹配
答案 0 :(得分:1)
你还没有提到你得到的错误。但我看到了这些问题:
声明char name = "Elham";
不正确。它应该是
char *name = "Elham";
代码中的if
条件缺少括号。
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";