任何人都可以解釋用什麼算法在strcmp比較C編程中的兩個字符串?什麼是「strcmp」中使用的比較算法 - C編程?
我不明白這個返回的值,它使用像「Levenstien算法」任何算法來找出距離的兩個字符串之間......
任何人都可以解釋用什麼算法在strcmp比較C編程中的兩個字符串?什麼是「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
由於性能原因(做最少量的工作來確定兩個字符串的等價性並脫離)從來沒有實施過實際的字符串距離算法。
距離算法不過是比較算法而已。它會說兩個字符串相等的程度。我的問題是什麼算法strcmp在後端使用。 strcmp是由某人編寫的函數,我需要知道它的邏輯。 – Sahal
@Sahal,這就是我在我的帖子中所說的。你會得到最快的距離算法,而不是levenstein等。人。 –
這些單證爲strcmp()是很清楚
零值表示這兩個字符串相等。大於零的值 表示第一個不匹配的字符在str1中的值大於str2中的 ;並且小於零的值 指示相反。
換句話說,它檢查了兩個字符串之間的lexicographical order或甚至更準確alphabetical order。
按照字節/代碼單位的字典順序,不是(寬)字符,更不用說任何文字約定用於字典排序。後者有'strcoll'。 –
只是在挖掘的過程中,但你擊敗了我:)。 – Corbin
謝謝@David .. – Sahal