2

strcmp,至少使用 g++,对许多架构进行了许多优化。在我的电脑 Core2Duo E8400 中,strcmp 比使用 straigforward 实现快两倍。

我的问题是它是否存在一些提供比较两个“反向字符串”的函数的库。反向字符串char *s1开始s1并结束于某个s1-n这样的s1-n == '\0'(wheren >= 0和 for all 0 <= n' < n, s1-n' != '\0')。

当然,要求是这个函数必须像strcmp一样高效和便携。

编辑:我只需要知道两个字符串是否相等(所以我不需要知道哪个更大。那么 strcmp 的相同优化原则上适用于反向字符串)。

4

2 回答 2

1

据我所知,针对特定架构的 strcmp 的大多数优化都使用了将多个字节一起比较的技巧,例如转换为带有对齐指针的 long 等。这类优化不可能与比较字符串的反转一起工作,即反转不会形成相同的时间,例如 long 并且再次反转它以生成相同的数字会导致效率损失。所以在我看来答案是否定的。

于 2012-09-24T11:21:43.933 回答
0

如果我有你的问题,一个反向strcmp,我会写它。出于几个原因,不要担心速度。

首先,具有strcmp重大“瓶颈”的程序很少见。

其次,strcmp在第一个不相等的字符处停止,因此除非字符串很长且几乎相等,否则平均可能比较很少的字符。任何花费大部分时间比较相等或几乎相等的字符串的程序都在乞求一些性能调整。

于 2012-09-24T11:47:10.063 回答