什么是“strcmp”中使用的比较算法 – C编程?

任何人都可以解释strcmp中使用什么算法来比较C编程中的两个字符串?

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

标准C库的GNU实现glibc是开源的,如果你很好奇,你可以阅读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永远不会使用实际的字符串距离算法实现(做最少量的工作来确定两个字符串的等价性并退出)。

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

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

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