中国語文字列ソートソリューション

1615 ワード

ここでは主にUTF-8符号化フォーマットでプログラミングし、文字列をソートする方法について説明します.
GBK符号化文字と中国語のピンイン順は一致しており、文字列符号化をGBK符号化フォーマットに変換することでソートできます!
まず,GBK符号化に関する知識を理解すべきである.
GBK符号化のすべての文字は、a 1~a 9のa 1~feの部分およびa 8、a 9の40~a 0の部分を含み、句読点、数学記号、数字番号、全角数字文字、日本語ひらがな、カタカナ、ギリシャ文字、ロシア文字、図形記号、タブ、ピンイン、注音記号などを含む.
一部の漢字:
GBK/2:GB 2312漢字
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;
    }