还有比这更短的吗?(计算C语言中一个字符在字符串中的出现次数)

Are there way shorter than this?(Counting number of occurrences of a char in a string in C)

本文关键字:一个 字符 字符串 语言 计算      更新时间:2023-10-16
int frequence(char *s,char c)
{
    return *s ? (*s==c)+frequence(s+1,c) : 0;
}

还有比这更短的吗?

如果你指的是字符,可能。如果你指的是运行时间?那么你离最优解还差得很远。

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

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

int k=0; while (*s) k += c == *s++; return k;

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

int frequence(char *s,char c)
{
        char *occur = s;
        int result = 0;
        while((occur = strchr(occur,c))){
                result++;
                occur++;
        }   
        return result;
}
相关文章: