本發(fā)明涉及計算機(jī)數(shù)據(jù)的處理技術(shù),特別涉及一種字符串比較的方法及裝置。
背景技術(shù):
電子游戲朝著大型的三維電子游戲的方向發(fā)展。因此,在現(xiàn)有的電子游戲程序中,會遇到數(shù)量巨大的字符串比較操作,諸如比較資源名稱等字符串的操作等。在電子游戲的程序中,字符串主要用于編程、概念說明及函數(shù)解釋,一般是由數(shù)字、字母、和/或下劃線組成的一串字符,是編程語言中表示文本的數(shù)據(jù)類型。
目前,在對電子游戲程序的字符串比較時,一般采用直接比較方式,就是采用C++編程語言的std::string命令中的==算法,或者使用C編程語言的strmp函數(shù)直接比較,得到字符串是否相等的結(jié)果。
采用這種直接比較方式對電子游戲程序的字符串進(jìn)行比較,無論是基于C++編程語言還是C編程語言,本質(zhì)上都是要逐一的比較字符串的每個字符,這種比較方法效率比較低,特別是電子游戲程序的數(shù)據(jù)量大且客戶端處理能力低的情況下,嚴(yán)重影響了電子游戲程序的性能和運(yùn)算速度,使得玩家的體驗度下降。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明實施例提供一種字符串比較的方法,該方法能夠提高電子游戲程序的字符串的比較速度,從而提高電子游戲程序的性能和運(yùn)算速度。
本發(fā)明實施例還提供一種字符串比較的裝置,該裝置能夠提高電子游戲程序的字符串的比較速度,從而提高電子游戲程序的性能和運(yùn)算速度。
根據(jù)上述目的,本發(fā)明是這樣實現(xiàn)的:
一種字符串比較的方法,包括:
處理電子游戲中的字符串,為字符串設(shè)置對應(yīng)的指針;
接收比較字符串指令后,根據(jù)字符串對應(yīng)的指針確定字符串是否相同。
所述根據(jù)字符串對應(yīng)的指針確定字符串是否相同為:
如果字符串對應(yīng)的指針不相同,則字符串不相同,如果字符串對應(yīng)的指針相同,則字符串相同。
所述為字符串設(shè)置對應(yīng)的指針為:
為電子游戲中的相同字符串設(shè)置同一指針。
所述為字符串設(shè)置對應(yīng)的指針為:
a、設(shè)置內(nèi)存空間,所述內(nèi)存空間用于存儲已處理的字符串;
b、設(shè)置映射信息,包括已處理的哈希值及對應(yīng)的已處理字符串的指針;
c、將要處理的字符串通過哈希算法計算,得到哈希值;
d、在映射信息中查找是否已經(jīng)存在相同的哈希值,如果是,執(zhí)行步驟e;如果否,則執(zhí)行步驟h;
e、客戶端判斷要處理的字符串是否與相同哈希值對應(yīng)的已處理并存儲的字符串相等,如果否,執(zhí)行步驟f;如果是,執(zhí)行步驟g;
f、客戶端將要處理的字符串的哈希值增加1后,返回步驟d繼續(xù)執(zhí)行;
g、客戶端在映射信息中存儲與要處理的字符串具有相同哈希值的已處理并存儲的字符串的指針;
h、客戶端將要處理的字符串作為已處理的字符串存儲到設(shè)置的內(nèi)存空間中,并將對應(yīng)的哈希值及指針存儲到映射信息中。
所述映射信息為映射地圖map,其中的整形數(shù)值為已處理的字符串的哈希值,記為key,指針為value,表示指向已處理的字符串的char*指針。
一種字符串比較的裝置,包括:預(yù)先處理單元、存儲單元及比較操作單元,其中,
預(yù)先處理單元,用于處理電子游戲中的字符串,為字符串設(shè)置對應(yīng)的指針;
存儲單元,用于存儲字符串和指針的對應(yīng)關(guān)系;
比較操作單元,用于接收到比較字符串指令后,根據(jù)字符串對應(yīng)的指針確定字符串是否相同。
所述預(yù)先處理單元,還用于將電子游戲中的相同字符串設(shè)置同一指針。
所述比較操作單元,還用于確定如果字符串對應(yīng)的指針不相同,則字符串不相同,如果字符串對應(yīng)的指針相同,則字符串相同。
由上述方案可以看出,本發(fā)明實施例預(yù)先對要處理的電子游戲程序中的字符串對應(yīng)指針,當(dāng)后續(xù)接收到電子游戲程序中的字符串比較指令時,直接比較字符串對應(yīng)的指針是否相等即可。更進(jìn)一步地,在對要處理的電子游戲程序中的字符串對應(yīng)指針時,進(jìn)行字符串的比較,對相同的字符串設(shè)置唯一的指針,從而更加簡便且快速地完成電子游戲程序的字符串的比較,提高了比較速度,提高電子游戲程序的性能和運(yùn)算速度。
附圖說明
圖1為本發(fā)明實施例提供的字符串比較的方法流程圖;
圖2為本發(fā)明實施例提供的為所處理的電子游戲中的字符串設(shè)置指針的方法流程圖;
圖3為本發(fā)明實施例提供的字符串比較的裝置結(jié)構(gòu)示意圖。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下參照附圖并舉實施例,對本發(fā)明作進(jìn)一步詳細(xì)說明。
為了提高電子游戲程序的字符串的比較速度,從而提高電子游戲程序的性能和運(yùn)算速度,特別是在電子游戲程序的數(shù)據(jù)量大且客戶端處理能力低的情況下,使得電子游戲程序不出現(xiàn)延遲,提高玩家的體驗度。本發(fā)明實施例預(yù)先對要處理的電子游戲程序中的字符串對應(yīng)指針,當(dāng)后續(xù)接收到電子游戲程序中的字符串比較指令時,直接比較字符串對應(yīng)的指針是否相等即可。更進(jìn)一步地,在對要處理的電子游戲程序中的字符串對應(yīng)指針時,進(jìn)行字符串的比較,對相同的字符串設(shè)置唯一的指針。
圖1為本發(fā)明實施例提供的字符串比較的方法流程圖,其具體步驟為:
步驟101、客戶端處理電子游戲中的字符串,為字符串設(shè)置對應(yīng)的指針;
步驟102、客戶端接收到比較字符串指令后,根據(jù)字符串對應(yīng)的指針確定字符串是否相同。
在本步驟中,如果字符串對應(yīng)的指針不相同,則字符串不相同,如果字符串對應(yīng)的指針相同,則字符串相同。
在該方法中,電子游戲中的相同字符串,在步驟101中設(shè)置的指針是相同的。
在該方法中的步驟101中,客戶端處理電子游戲中的字符串,為字符串設(shè)置對應(yīng)的指針如圖2所示,圖2為本發(fā)明實施例提供的為所處理的電子游戲中的字符串設(shè)置指針的方法流程圖,其具體步驟為:
步驟201、客戶端設(shè)置內(nèi)存空間,所述內(nèi)存空間存儲已處理的電子游戲的字符串;
步驟202、客戶端設(shè)置映射信息,包括已處理的字符串的哈希值及對應(yīng)的指針;
在本步驟中,映射信息為映射地圖(map),其中的整形數(shù)值設(shè)置為已處理的字符串的哈希值,記為key,指針為value,表示指向已處理的字符串的char*指針;
步驟203、客戶端將要處理的字符串通過哈希算法計算,得到要處理的哈希值;
步驟204、客戶端在映射信息中查找是否已經(jīng)存在相同的哈希值,如果是,執(zhí)行步驟205;如果否,則執(zhí)行步驟208;
步驟205、客戶端判斷字符串是否與已經(jīng)存儲的相同哈希值對應(yīng)的字符串相等,如果否,執(zhí)行步驟206;如果是,執(zhí)行步驟207;
在本步驟中,有一些要處理的字符串雖然計算的哈希值與已經(jīng)處理并存儲的字符串相同,但是要處理的字符串與已經(jīng)處理的字符串卻不同,稱為碰撞哈希情況;為了避免出現(xiàn)這種情況,就需要進(jìn)一步對要處理的字符串與已經(jīng)處理并存儲的字符串進(jìn)行進(jìn)一步比較;
步驟206、客戶端將要處理的字符串的哈希值增加1后,返回步驟204繼續(xù)執(zhí)行;
在本步驟中,更改要處理的字符串的哈希值,使得出現(xiàn)碰撞哈希的情況降低;
步驟207、客戶端在映射信息中返回與要處理的字符串具有相同哈希值的已經(jīng)處理并存儲的字符串的指針;
步驟208、客戶端將要處理的字符串存儲到設(shè)置的內(nèi)存空間中,并將計算的要處理的字符串的哈希值及指針存儲到映射信息中。
這樣,客戶端就為電子游戲中的每個字符串都設(shè)置了指針,且其中的相同字符串的指針相同。
等到后續(xù)客戶端接收到比較字符串的指令后,直接調(diào)取字符串的指針進(jìn)行比較,就可以確定字符串是否相同。完成了電子游戲中的字符串的比較工作。
在本發(fā)明實施例中,計算要處理的字符串的哈希值算法為,設(shè)定哈希種子及字符串,求出哈希值,哈希種子為計算哈希值采用的累乘因子,該例子設(shè)置為131,采用的哈希值計算的函數(shù)為BKDRHash,具體為:
在本發(fā)明實施例中,在map中查找是否有相同的哈希值并對字符串進(jìn)行處理的具體過程為:
圖3為本發(fā)明實施例提供的字符串比較的裝置結(jié)構(gòu)示意圖,如圖所示,包括:預(yù)先處理單元、存儲單元及比較操作單元,其中,
預(yù)先處理單元,用于處理電子游戲中的字符串,為字符串設(shè)置對應(yīng)的指針;
存儲單元,用于存儲字符串和指針的對應(yīng)關(guān)系;
比較操作單元,用于接收到比較字符串指令后,根據(jù)字符串對應(yīng)的指針確定字符串是否相同。
在該結(jié)構(gòu)中,所述預(yù)先處理單元,還用于將電子游戲中的相同字符串設(shè)置同一指針。
在該結(jié)構(gòu)中,所述比較操作單元,還用于確定如果字符串對應(yīng)的指針不相同,則字符串不相同,如果字符串對應(yīng)的指針相同,則字符串相同。
以上舉較佳實施例,對本發(fā)明的目的、技術(shù)方案和優(yōu)點進(jìn)行了進(jìn)一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。