2012-06-07 54 views

回答

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; 
} 
+0

只是在挖掘的過程中,但你擊敗了我:)。 – Corbin

+0

謝謝@David .. – Sahal

4

strcmp不是字符串距離算法。它是一個字符串比較算法,它需要告訴你的唯一的事情是兩個字符串是否相等(返回碼爲零),或者如果不是,兩個字符串中的哪一個對於該字的某些含義是「較大」的正值或負值)。

未指定返回結果的大小,即它總是可以返回1,0或-1;或者它可以返回某個距離度量的實際積分距離(例如Levenstein,簡單減法等)。實際上,strcmp由於性能原因(做最少量的工作來確定兩個字符串的等價性並脫離)從來沒有實施過實際的字符串距離算法。

+0

距離算法不過是比較算法而已。它會說兩個字符串相等的程度。我的問題是什麼算法strcmp在後端使用。 strcmp是由某人編寫的函數,我需要知道它的邏輯。 – Sahal

+0

@Sahal,這就是我在我的帖子中所說的。你會得到最快的距離算法,而不是levenstein等。人。 –

3

這些單證爲strcmp()是很清楚

零值表示這兩個字符串相等。大於零的值 表示第一個不匹配的字符在str1中的值大於str2中的 ;並且小於零的值 指示相反。

換句話說,它檢查了兩個字符串之間的lexicographical order或甚至更準確alphabetical order

+2

按照字節/代碼單位的字典順序,不是(寬)字符,更不用說任何文字約定用於字典排序。後者有'strcoll'。 –