2

谁能解释strcmp中使用什么算法来比较 C 编程中的两个字符串?

我不明白这个返回值,它使用任何算法,如' Levenstien算法'来找出两个字符串之间的距离......

4

3 回答 3

6

标准 C 库 glibc 的 GNU 实现是开源的,如果您好奇,可以阅读strcmp.c 。没什么大不了的。这里是:

/* Compare S1 and S2, returning less than, equal to or
   greater than zero if S1 is lexicographically less than,
   equal to or greater than S2.  */
int strcmp (const char *p1, const char *p2)
{
  register const unsigned char *s1 = (const unsigned char *) p1;
  register const unsigned char *s2 = (const unsigned char *) p2;
  unsigned reg_char c1, c2;

  do
    {
      c1 = (unsigned char) *s1++;
      c2 = (unsigned char) *s2++;
      if (c1 == '\0')
        return c1 - c2;
    }
  while (c1 == c2);

  return c1 - c2;
}
于 2012-06-07T07:07:46.673 回答
4

strcmp不是字符串距离算法。它是一种字符串比较算法,唯一需要告诉您的是两个字符串是否相等(返回代码为零)或者如果不相等,对于该词的某些含义,两个字符串中的哪个“更大”(一个肯定的或负值)。

返回结果的大小没有指定,即它总是可以返回1、0或-1;或者它可以返回某个距离度量的实际积分距离(例如 Levenstein、简单减法等)。在实践中,strcmp出于性能原因,从未使用实际的字符串距离算法实现(做最少的工作来确定两个字符串的等价性并退出)。

于 2012-06-07T06:58:37.793 回答
3

这些strcmp()的文档非常清楚

零值表示两个字符串相等。大于零的值表示第一个不匹配的字符在 str1 中的值大于在 str2 中的值;小于零的值表示相反。

换句话说,它检查两个字符串之间的字典顺序,甚至更准确的字母顺序。

于 2012-06-07T07:01:16.390 回答