中文字符串排序解决方案

此文主要介绍采用UTF-8编码格式编程,对字符串进行排序。

GBK编码字符和汉语拼音顺序是一致的可以利用将字符串编码转为GBK编码格式的方式来进行排序!

首先,我们应该了解一下GBK编码的相关知识。

GBK编码所有字符包括在a1~a9中a1~fe的部分及a8,a9中40~a0的部分,包括标点符号、数学符号、数字序号、全角数字字母、日文平假名、片假名、希腊字母、俄文字母、图形符号、制表符、拼音、注音符号等。

一下部分汉字:

 GBK/2: GB2312 汉字
B0 0 1 2 3 4 5 6 7 8 9 A B C D E F
A 啊 阿 埃 挨 哎 唉 哀 皑 癌 蔼 矮 艾 碍 爱 隘
B 鞍 氨 安 俺 按 暗 岸 胺 案 肮 昂 盎 凹 敖 熬 翱
C 袄 傲 奥 懊 澳 芭 捌 扒 叭 吧 笆 八 疤 巴 拔 跋
D 靶 把 耙 坝 霸 罢 爸 白 柏 百 摆 佰 败 拜 稗 斑
E 班 搬 扳 般 颁 板 版 扮 拌 伴 瓣 半 办 绊 邦 帮
F 梆 榜 膀 绑 棒 磅 蚌 镑 傍 谤 苞 胞 包 褒 剥
B1 0 1 2 3 4 5 6 7 8 9 A B C D E F
A 薄 雹 保 堡 饱 宝 抱 报 暴 豹 鲍 爆 杯 碑 悲
B 卑 北 辈 背 贝 钡 倍 狈 备 惫 焙 被 奔 苯 本 笨
C 崩 绷 甭 泵 蹦 迸 逼 鼻 比 鄙 笔 彼 碧 蓖 蔽 毕
D 毙 毖 币 庇 痹 闭 敝 弊 必 辟 壁 臂 避 陛 鞭 边
E 编 贬 扁 便 变 卞 辨 辩 辫 遍 标 彪 膘 表 鳖 憋
F 别 瘪 彬 斌 濒 滨 宾 摈 兵 冰 柄 丙 秉 饼 炳


详细参考链接:点击打开链接

由上可知,GBK编码字符和汉语拼音顺序是一致的,因此,可以利用将字符串编码转为GBK编码格式的方式来进行排序。

附上转码代码:

std::string UTF8ToGBK(const std::string& strUTF8)
    {
        int len = MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, NULL, 0);
        unsigned short * wszGBK = new unsigned short[len + 1];
        memset(wszGBK, 0, len * 2 + 2);
        MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)(strUTF8.c_str()), -1, wszGBK, len);
        len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
        char *szGBK = new char[len + 1];
        memset(szGBK, 0, len + 1);
        WideCharToMultiByte(CP_ACP,0, wszGBK, -1, szGBK, len, NULL, NULL);
        std::string strTemp(szGBK);
        delete[]szGBK;
        delete[]wszGBK;
        return strTemp;
    }


你可能感兴趣的:(C++,Qt)