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;
}