如何计算C字符串中字符'/'的出现次数?

JAN*_*JAN 5 c string

如何计算C字符串中出现的次数/

我可以做这个:

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

但这不是一种优雅的方式; 有关如何改进它的任何建议?

pb2*_*b2q 5

strchr 会做一个更小的循环:

ptr = str;

while ((ptr = strchr(ptr '/')) != NULL)
    count++, ptr++;
Run Code Online (Sandbox Code Playgroud)

我应该补充一点,为了简洁起见,我并不赞同简洁,而且我总是选择最清晰的表达方式,所有其他条件都相同.我发现strchr循环更优雅,但问题中的原始实现是明确的并且存在于函数内部,所以我不喜欢其中一个,只要它们都通过单元测试.

  • 21世纪的C编码器如何编写代码,@ OliCharlesworth?我是一名20世纪的C编码员,他还在工作; pb2q编写的内容对我来说是好看的`countSlash()`函数的主体. (4认同)
  • @OliCharlesworth我真的不能说在表达式中分配是一个问题,毕竟它是一个语言功能,IMO非常易于阅读和理解.另一方面,我不喜欢"过于冗长"的惯例,我发现当快速浏览几行时会使代码难以阅读.需要来回跳跃,因为一切都散落在周围.不好.:) (2认同)
  • @OliCharlesworth:你会写什么呢?`char*ptr = strchr(str,'/'); while(ptr!= NULL)ptr = strchr(ptr,'/');`?这会将调用写入`strchr()`两次,这违反了DRY(不要重复自己)的原则. (2认同)