本发明涉及计算机数据的处理技术,特别涉及一种字符串比较的方法及装置。
背景技术:
电子游戏朝着大型的三维电子游戏的方向发展。因此,在现有的电子游戏程序中,会遇到数量巨大的字符串比较操作,诸如比较资源名称等字符串的操作等。在电子游戏的程序中,字符串主要用于编程、概念说明及函数解释,一般是由数字、字母、和/或下划线组成的一串字符,是编程语言中表示文本的数据类型。
目前,在对电子游戏程序的字符串比较时,一般采用直接比较方式,就是采用C++编程语言的std::string命令中的==算法,或者使用C编程语言的strmp函数直接比较,得到字符串是否相等的结果。
采用这种直接比较方式对电子游戏程序的字符串进行比较,无论是基于C++编程语言还是C编程语言,本质上都是要逐一的比较字符串的每个字符,这种比较方法效率比较低,特别是电子游戏程序的数据量大且客户端处理能力低的情况下,严重影响了电子游戏程序的性能和运算速度,使得玩家的体验度下降。
技术实现要素:
有鉴于此,本发明实施例提供一种字符串比较的方法,该方法能够提高电子游戏程序的字符串的比较速度,从而提高电子游戏程序的性能和运算速度。
本发明实施例还提供一种字符串比较的装置,该装置能够提高电子游戏程序的字符串的比较速度,从而提高电子游戏程序的性能和运算速度。
根据上述目的,本发明是这样实现的:
一种字符串比较的方法,包括:
处理电子游戏中的字符串,为字符串设置对应的指针;
接收比较字符串指令后,根据字符串对应的指针确定字符串是否相同。
所述根据字符串对应的指针确定字符串是否相同为:
如果字符串对应的指针不相同,则字符串不相同,如果字符串对应的指针相同,则字符串相同。
所述为字符串设置对应的指针为:
为电子游戏中的相同字符串设置同一指针。
所述为字符串设置对应的指针为:
a、设置内存空间,所述内存空间用于存储已处理的字符串;
b、设置映射信息,包括已处理的哈希值及对应的已处理字符串的指针;
c、将要处理的字符串通过哈希算法计算,得到哈希值;
d、在映射信息中查找是否已经存在相同的哈希值,如果是,执行步骤e;如果否,则执行步骤h;
e、客户端判断要处理的字符串是否与相同哈希值对应的已处理并存储的字符串相等,如果否,执行步骤f;如果是,执行步骤g;
f、客户端将要处理的字符串的哈希值增加1后,返回步骤d继续执行;
g、客户端在映射信息中存储与要处理的字符串具有相同哈希值的已处理并存储的字符串的指针;
h、客户端将要处理的字符串作为已处理的字符串存储到设置的内存空间中,并将对应的哈希值及指针存储到映射信息中。
所述映射信息为映射地图map,其中的整形数值为已处理的字符串的哈希值,记为key,指针为value,表示指向已处理的字符串的char*指针。
一种字符串比较的装置,包括:预先处理单元、存储单元及比较操作单元,其中,
预先处理单元,用于处理电子游戏中的字符串,为字符串设置对应的指针;
存储单元,用于存储字符串和指针的对应关系;
比较操作单元,用于接收到比较字符串指令后,根据字符串对应的指针确定字符串是否相同。
所述预先处理单元,还用于将电子游戏中的相同字符串设置同一指针。
所述比较操作单元,还用于确定如果字符串对应的指针不相同,则字符串不相同,如果字符串对应的指针相同,则字符串相同。
由上述方案可以看出,本发明实施例预先对要处理的电子游戏程序中的字符串对应指针,当后续接收到电子游戏程序中的字符串比较指令时,直接比较字符串对应的指针是否相等即可。更进一步地,在对要处理的电子游戏程序中的字符串对应指针时,进行字符串的比较,对相同的字符串设置唯一的指针,从而更加简便且快速地完成电子游戏程序的字符串的比较,提高了比较速度,提高电子游戏程序的性能和运算速度。
附图说明
图1为本发明实施例提供的字符串比较的方法流程图;
图2为本发明实施例提供的为所处理的电子游戏中的字符串设置指针的方法流程图;
图3为本发明实施例提供的字符串比较的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。
为了提高电子游戏程序的字符串的比较速度,从而提高电子游戏程序的性能和运算速度,特别是在电子游戏程序的数据量大且客户端处理能力低的情况下,使得电子游戏程序不出现延迟,提高玩家的体验度。本发明实施例预先对要处理的电子游戏程序中的字符串对应指针,当后续接收到电子游戏程序中的字符串比较指令时,直接比较字符串对应的指针是否相等即可。更进一步地,在对要处理的电子游戏程序中的字符串对应指针时,进行字符串的比较,对相同的字符串设置唯一的指针。
图1为本发明实施例提供的字符串比较的方法流程图,其具体步骤为:
步骤101、客户端处理电子游戏中的字符串,为字符串设置对应的指针;
步骤102、客户端接收到比较字符串指令后,根据字符串对应的指针确定字符串是否相同。
在本步骤中,如果字符串对应的指针不相同,则字符串不相同,如果字符串对应的指针相同,则字符串相同。
在该方法中,电子游戏中的相同字符串,在步骤101中设置的指针是相同的。
在该方法中的步骤101中,客户端处理电子游戏中的字符串,为字符串设置对应的指针如图2所示,图2为本发明实施例提供的为所处理的电子游戏中的字符串设置指针的方法流程图,其具体步骤为:
步骤201、客户端设置内存空间,所述内存空间存储已处理的电子游戏的字符串;
步骤202、客户端设置映射信息,包括已处理的字符串的哈希值及对应的指针;
在本步骤中,映射信息为映射地图(map),其中的整形数值设置为已处理的字符串的哈希值,记为key,指针为value,表示指向已处理的字符串的char*指针;
步骤203、客户端将要处理的字符串通过哈希算法计算,得到要处理的哈希值;
步骤204、客户端在映射信息中查找是否已经存在相同的哈希值,如果是,执行步骤205;如果否,则执行步骤208;
步骤205、客户端判断字符串是否与已经存储的相同哈希值对应的字符串相等,如果否,执行步骤206;如果是,执行步骤207;
在本步骤中,有一些要处理的字符串虽然计算的哈希值与已经处理并存储的字符串相同,但是要处理的字符串与已经处理的字符串却不同,称为碰撞哈希情况;为了避免出现这种情况,就需要进一步对要处理的字符串与已经处理并存储的字符串进行进一步比较;
步骤206、客户端将要处理的字符串的哈希值增加1后,返回步骤204继续执行;
在本步骤中,更改要处理的字符串的哈希值,使得出现碰撞哈希的情况降低;
步骤207、客户端在映射信息中返回与要处理的字符串具有相同哈希值的已经处理并存储的字符串的指针;
步骤208、客户端将要处理的字符串存储到设置的内存空间中,并将计算的要处理的字符串的哈希值及指针存储到映射信息中。
这样,客户端就为电子游戏中的每个字符串都设置了指针,且其中的相同字符串的指针相同。
等到后续客户端接收到比较字符串的指令后,直接调取字符串的指针进行比较,就可以确定字符串是否相同。完成了电子游戏中的字符串的比较工作。
在本发明实施例中,计算要处理的字符串的哈希值算法为,设定哈希种子及字符串,求出哈希值,哈希种子为计算哈希值采用的累乘因子,该例子设置为131,采用的哈希值计算的函数为BKDRHash,具体为:
在本发明实施例中,在map中查找是否有相同的哈希值并对字符串进行处理的具体过程为:
图3为本发明实施例提供的字符串比较的装置结构示意图,如图所示,包括:预先处理单元、存储单元及比较操作单元,其中,
预先处理单元,用于处理电子游戏中的字符串,为字符串设置对应的指针;
存储单元,用于存储字符串和指针的对应关系;
比较操作单元,用于接收到比较字符串指令后,根据字符串对应的指针确定字符串是否相同。
在该结构中,所述预先处理单元,还用于将电子游戏中的相同字符串设置同一指针。
在该结构中,所述比较操作单元,还用于确定如果字符串对应的指针不相同,则字符串不相同,如果字符串对应的指针相同,则字符串相同。
以上举较佳实施例,对本发明的目的、技术方案和优点进行了进一步详细说明,所应理解的是,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。