查找最后一个char事件的最有效方法

时间:2012-08-28 20:30:45

标签: c performance strrchr

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

size_t strlstchar(const char *str, const char ch)
{
    char *chptr = strrchr(str, ch);
    return chptr - str;
}

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

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

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

3 个答案:

答案 0 :(得分:4)

您使用的方法非常好 - 遗憾的是,阵列操作非常昂贵。在大多数实现中,Strrchr只是从结束开始逐步遍历字符串,直到找到匹配的字符。那是O(n)时间。然后执行减法O(1)。这不是那么糟糕。

答案 1 :(得分:3)

来自文档:

  

返回指向C字符串str。

中最后一个字符的指针

所以它完全符合您的要求。它存在的目的就是这个。

  

strrchr是一种有效的方法吗?

几乎可以肯定写得比你自己做的更好或更好。

  

或者strrchr最好留给其他用途吗?

没有。它完全是为了这个目的写的。

答案 2 :(得分:0)

如果你可以提供字符串的长度然后向后循环,它会更快。当你发现第一次出现的角色立即返回时。

如果你不知道长度,只需使用strrchr。

相关问题