5

のC文字列の出現回数をカウントするにはどうすればよい/ですか?

私がすることができます:

int countSlash(char str[])
{
    int count = 0, k = 0;
    while (str[k] != '\0')
    {
          if (str[k] == '/')
              count++;
          k++;
    }
    return count;
}

しかし、これはエレガントな方法ではありません。それを改善する方法について何か提案はありますか?

4

4 に答える 4

6

strchrより小さなループを作成します:

ptr = str;

while ((ptr = strchr(ptr '/')) != NULL)
    count++, ptr++;

簡潔にするために簡潔さを支持するのではなく、他のすべての条件が同じである場合は、常に最も明確な表現を選択することを付け加えておきます。strchrループの方がエレガントだと思いますが、質問の元の実装は明確で関数内にあるため、両方が単体テストに合格する限り、どちらか一方を優先することはありません。

于 2012-06-17T19:44:09.777 に答える
2

ジェネリックインターフェイス、明白なアプローチ、適切なタイプ、および純粋に慣用的な表現:

size_t str_count_char(const char *s, int c)
{
    size_t count = 0;

    while (s && *s)
         if (*s++ == c)
             ++count;

    return count;
}

Oli Charlesworthは、おそらく同じ行の割り当てと条件に関する懸念を提起するでしょうが、それはかなりよく隠されていると思います;-)

于 2012-06-18T08:56:42.947 に答える
2

あなたのもので十分です。たぶん、これはいくつかの人にとってよりきれいに見えるでしょう:

int countSlash(char * str)
{
    int count = 0;
    for (; *str != 0; ++str)
    {
        if (*str == '/')
            count++;
    }
    return count;
}
于 2012-06-17T19:50:10.347 に答える
0

これも機能します:

int count=0;
char *s=str;
while (*s) count += (*s++ == '/');
于 2012-06-17T19:52:48.177 に答える