?? ?
字號:
1.設計需求所要求的是一個簡單的函數(shù):給定兩個普通的C風格字符串(以NULL)結(jié)尾,該函數(shù)就會返回一個介于0和1之間的浮點數(shù),表示這兩個字符串的匹配度(或說兩個字體串之間的相似度)。
2.現(xiàn)有的一些解決方案
實際上我們真正尋找的是Levenshtein距離算法(這個公式是由Vladimir Levenshtein在1965年發(fā)現(xiàn)的),也就是算出從一個字符串轉(zhuǎn)換成另一個字符串所需要的編輯次數(shù),這個公式可以描述出兩個字符串的相似度。對于我們上面所描述的實現(xiàn)的實現(xiàn)接口,單有這個公式是不夠的,因為我們需要一個相似度指數(shù),以便可以建立一個有意義的入口。
3.我自己定制的字串匹配方案
首先,我們判斷出兩個字串中比較長的那一個,并以它的長度作為長度計算的基準值,每個參入匹配的字母表示著一個用1除以這個長度基準值所得到的值。對于大小寫的錯誤,我們可以向匹配中增加正常值的一個百分比90%。對于位置不正確的文本,我們只會計算它一半的值。這是因為,為了有利于前一個字集匹配,我們放棄上一個最新發(fā)現(xiàn)的匹配,這看上去是一個公平的估值計算,可以允許合理數(shù)量的位置錯誤字體。最后,缺少的、或者多出來的字體會使精度的值成比例下降。
while中主要部分循環(huán)說明:利用一個外部循環(huán)和一個內(nèi)部循環(huán),將左實驗指針(lp)和右實驗指針(rp)向前推進,在所有新的匹配組合中進行循環(huán)遍歷,來完成上述工作。在左/右兩個字符串中,我們應該推進幾步才能得到一對匹配的字符?這兩個值記錄在lefCount和rightCount中。根據(jù)這兩個值,我們可以算出一個匹配度值。將這兩個值相加,我們就得到最后的分值(totalScore)。這是為了防止出現(xiàn)最壞匹配的情況。在這種情況下,一個無關的字母與另一個字串中接近尾部的某個字符相匹配,我們將這樣的匹配標識為低匹配的匹配,并選擇其他更為合理的,在兩個字符串中位置更靠前的匹配。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -