1. 程式人生 > >字元雜湊(hash)

字元雜湊(hash)

字串hash的核心思想與整數hash是一致的,將字串對映成為一個整數唯一表示。

假設字串只由A~Z組成,將A~Z看做0-25,這樣就轉化成了一個26進位制數,再將這個26進位制數轉化為10進位制數,則每個字串都能用一個整數唯一表示。

程式碼如下:

int hashchar(char a[], int len){
    int sum = 0;
    for(int i = 0; i < len; ++i){
        sum = sum * 26 + (a[i] - 'A');
    }
    return sum;
}

考慮到整數範圍,這裡需注意len不能過大。若字元中出現小寫字母,則將a~z看做26-51,這樣就變成了52進位制數,道理同上;

int hashchar(char a[], int len){
    int sum = 0;
    for(int i = 0; i < len; ++i){
        if(a[i] >= 'A' && a[i] <= 'Z')
        sum = sum * 52 + (a[i] - 'A');
        else
        sum = sum * 52 + (a[i] - 'a') + 26;
    }
    return sum;
}

出現數字同理,但這裡有個小技巧,如果知道,數字出現的位置固定則直接加上去,例如BCD4,講前面的字元轉化為731,然後直接在末尾加上4變成7314即可。