0
int frequence(char *s,char c)
{
    return *s ? (*s==c)+frequence(s+1,c) : 0;
}

还有比这更短的方法吗?

4

3 回答 3

4

如果你的意思是字符,可能。如果你的意思是运行时?那么你离最佳解决方案还很远。

递归比循环慢得多,如果按照编写的方式精确编译,将占用大量堆栈空间来存储足够大的字符串。

于 2013-06-15T08:42:47.057 回答
1

使用 strchr 可以获得更好的运行时效率

int frequence(char *s,char c)
{
        char *occur = s;
        int result = 0;
        while((occur = strchr(occur,c))){
                result++;
                occur++;
        }   
        return result;
}
于 2013-06-15T09:00:15.500 回答
1

好吧,如果函数必须命名为frequence,那么迭代方式的字符可能会短一些(当然在删除不必要的空格之后):

int k=0; while (*s) k += c == *s++; return k;
于 2013-06-15T08:49:11.843 回答