C++ 还有比这个短的吗?(计算C中字符串中字符的出现次数)

C++ 还有比这个短的吗?(计算C中字符串中字符的出现次数),c++,c,C++,C,还有比这个短的吗?如果你指的是字符,可能是。如果你指的是运行时间?那么你就远不是最理想的解决方案了 递归比循环慢得多,如果按照编写的方式编译,将为足够大的字符串占用大量的堆栈空间 如果你指的是字符,可能是。如果你指的是运行时间?那么你就远不是最理想的解决方案了 递归比循环慢得多,如果按照编写的方式编译,将为足够大的字符串占用大量的堆栈空间 好吧,如果函数必须命名为frequence,那么迭代方式的字符可能会短一些(当然,在删除不必要的空格之后): 好的,如果函数必须命名为frequence,那么

还有比这个短的吗?

如果你指的是字符,可能是。如果你指的是运行时间?那么你就远不是最理想的解决方案了


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

如果你指的是字符,可能是。如果你指的是运行时间?那么你就远不是最理想的解决方案了


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

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


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


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

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

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

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

frequence
重命名为
f
,它将变得更短。定义更短。角色?运行时?@Inspired:甚至更加晦涩!照@Inspired说的做,并在操作之间删除空格,即
返回*s?(*s==c)+f(s+1,c):0。若要使其更短,请删除行更改,这样您就可以将所有代码放在一行中。我不喜欢拿汉字开玩笑。@pinkparterrename
frequency
f
,它将变得更短。定义更短。角色?运行时?@Inspired:甚至更加晦涩!照@Inspired说的做,并在操作之间删除空格,即
返回*s?(*s==c)+f(s+1,c):0。若要使其更简短,请删除行更改,这样您就可以将所有代码放在一行中。我不喜欢拿汉字开玩笑。@pinkparter+1表示堆栈空间。输入足够大的文本块,它很可能会崩溃。当然,一行可能不会,但它肯定不会接受“所有的莎士比亚作品都是一个字符串”。clang(3.2)在优化时将递归转换为循环。但是gcc(4.7.2)没有,如果Clang不考虑优化标志就这样做,那么Clang就是愚蠢的。我同意在优化堆栈空间时,这样做是正确的。输入足够大的文本块,它很可能会崩溃。当然,一行可能不会,但它肯定不会接受“所有的莎士比亚作品都是一个字符串”。clang(3.2)在优化时将递归转换为循环。但是gcc(4.7.2)没有,如果Clang不考虑优化标志就这样做,那么Clang就是愚蠢的。我同意在优化时,这是正确的做法。
int frequence(char *s,char c)
{
        char *occur = s;
        int result = 0;
        while((occur = strchr(occur,c))){
                result++;
                occur++;
        }   
        return result;
}