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代码>。若要使其更短,请删除行更改,这样您就可以将所有代码放在一行中。我不喜欢拿汉字开玩笑。@pinkparterrenamefrequency
到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;
}