5

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

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

我只是在这里快速输入(尚未编译或尚未编译),只是因为我对一些事情有疑问。

对我来说,这似乎是查找哪个数组元素包含特定字符的最后一个实例的最简单的解决方案,但我不知道它是如何工作的。我只是按照 strrchr 的文档制作的,所以从技术上讲,它是 strrchr 完成所有工作。我只是无法想象这是实现这一目标的最佳方式(就性能而言),并希望有人可以就什么是实现这一目标的最佳方式提供一些意见。

strrchr 是一种有效的方法吗?还是 strrchr 最好留作其他用途?

4

3 回答 3

4

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

于 2012-08-28T20:34:15.540 回答
3

从文档:

返回指向 C 字符串 str 中最后出现的字符的指针。

所以它正是你想要的。它存在的目的就是这个。

strrchr 是一种有效的方法吗?

几乎可以肯定,它写得至少和你自己写的一样好或更好。

还是 strrchr 最好留作其他用途?

不,它正是为此目的而写的。

于 2012-08-28T20:37:34.253 回答
0

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

如果您不知道长度,请使用 strrchr。

于 2012-08-28T20:38:57.780 回答