谁能解释strcmp中使用什么算法来比较 C 编程中的两个字符串?
我不明白这个返回值,它使用任何算法,如' Levenstien算法'来找出两个字符串之间的距离......
标准 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;
}
strcmp
不是字符串距离算法。它是一种字符串比较算法,唯一需要告诉您的是两个字符串是否相等(返回代码为零)或者如果不相等,对于该词的某些含义,两个字符串中的哪个“更大”(一个肯定的或负值)。
返回结果的大小没有指定,即它总是可以返回1、0或-1;或者它可以返回某个距离度量的实际积分距离(例如 Levenstein、简单减法等)。在实践中,strcmp
出于性能原因,从未使用实际的字符串距离算法实现(做最少的工作来确定两个字符串的等价性并退出)。