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

関数に名前frequenceを付ける必要がある場合、反復的な方法はおそらく文字数が少し短くなります(もちろん不要なスペースを削除した後):

int k=0; while (*s) k += c == *s++; return k;
于 2013-06-15T08:49:11.843 に答える
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 に答える