int frequence(char *s,char c)
{
return *s ? (*s==c)+frequence(s+1,c) : 0;
}
还有比这更短的方法吗?
如果你的意思是字符,可能。如果你的意思是运行时?那么你离最佳解决方案还很远。
递归比循环慢得多,如果按照编写的方式精确编译,将占用大量堆栈空间来存储足够大的字符串。
使用 strchr 可以获得更好的运行时效率
int frequence(char *s,char c)
{
char *occur = s;
int result = 0;
while((occur = strchr(occur,c))){
result++;
occur++;
}
return result;
}
好吧,如果函数必须命名为frequence
,那么迭代方式的字符可能会短一些(当然在删除不必要的空格之后):
int k=0; while (*s) k += c == *s++; return k;