找到最后一个char出现的最有效方法

Kei*_*ler 5 c performance strrchr

考虑一下我快速编写的这个函数来查找字符串中给定char的最后一次出现,并返回它在字符数组中的位置,该字符在物理上是字符串:

size_t strlstchar(const char *str, const char ch)
{
    char *chptr = strrchr(str, ch);
    return chptr - str;
}
Run Code Online (Sandbox Code Playgroud)

我只是在这里快速输入这个(没有编译或任何),因为我对一些事情有疑问.

对我来说,这似乎是找到哪个数组元素保存特定char的最后一个实例的最简单的解决方案,但我不知道它是如何工作的.我刚刚根据strrchr的文档做了这个,所以它在技术上是strrchr完成所有的工作.我无法想象这是实现这一目标的最佳方式(在性能方面),并且希望有人可以提供一些关于最佳方法的信息.

strrchr是一种有效的方法吗?或者strrchr最好留给其他一些用途?

小智 4

您使用的方法非常好 - 不幸的是,数组操作非常昂贵。在大多数实现中,Strrchr 只是从字符串末尾开始逐步遍历字符串,直到找到匹配的字符。是O(n)时候了。然后你执行减法,即O(1)。这还不错。