首页 新闻 会员 周边

C#获取汉字首字母或者获取汉字拼音或者汉字按照首字母排序

0
悬赏园豆:20 [已解决问题] 解决于 2017-02-14 10:19

在网上找了一段汉字按首字母排序的代码,结果是正确的,但是不是太明白。

所以想请教高手解释下这段代码。

问题补充:
string[] arrHZ = { "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" };
            int area = 0;
            int pos = 0;
            int yiWei = 0;
            int code = 0;
            int py = 0;
            int[] areacode = { 45217, 45253, 45761, 46318, 46826, 47010, 47297, 47614, 48119, 48119, 49062, 49324, 49896, 50371, 50614, 50622, 50906, 51387, 51446, 52218, 52698, 52698, 52698, 52980, 53689, 54481 };
            for (int i = 0; i < arrHZ.Length; i++)
            {
                arrByte = Encoding.Default.GetBytes(arrHZ[i]);
                area = (short)arrByte[0];
                pos = (short)arrByte[1];
                yiWei = area << 8;
                code = yiWei + pos;
               
                for (int j = 0; j < 26; j++)
                {
                    int max = 55290;
                    if (j != 25) max = areacode[j + 1];
                    if (areacode[j] <= code && code < max)
                    {
                        py = j + 200;
                        Console.WriteLine("area:" + area + ",pos:" + pos + ",yiWei:" + yiWei + ",code:" + code + ",py:" + py);
                    }
                }

            }

//源代码:

public static int GetSpellByOneChar(char onechar)
{
string text = onechar.ToString();
byte[] arrCN = Encoding.Default.GetBytes(text);
if (arrCN.Length > 1)//分析汉字.
{
int area = (short)arrCN[0];
int pos = (short)arrCN[1];
int code = (area << 8) + pos;
int[] areacode = { 45217, 45253, 45761, 46318, 46826, 47010, 47297, 47614, 48119, 48119, 49062, 49324, 49896, 50371, 50614, 50622, 50906, 51387, 51446, 52218, 52698, 52698, 52698, 52980, 53689, 54481 };
for (int i = 0; i < 26; i++)
{
int max = 55290;
if (i != 25) max = areacode[i + 1];
if (areacode[i] <= code && code < max)
{
return i + 200;
}
}
return 0;//其他字符
}
else
{
//将小写字母和大写字母归为一类.
if (arrCN[0] > 94 && arrCN[0] < 123)
{
return arrCN[0] - 32;
}
return arrCN[0];
}
}

 
荆棘人的主页 荆棘人 | 菜鸟二级 | 园豆:410
提问于:2016-10-22 11:42
< >
分享
最佳答案
0

程序中areacode,是中文啊、芭、擦等等26个字母开头的汉字的编码十进制表示。然后把需要排序的汉字在程序中也转换为编码的十进制表示。然后和上面的26个的比较,给了一个200到226的数字,然后依据这个数字排序。

汉字编码中只有一部分常用的在gb2312中按拼音排的,有些不是,对于不是的这一部分,这个函数就没用了。

收获园豆:20
授之以渔 | 小虾三级 |园豆:1107 | 2016-10-22 13:39

e !

荆棘人 | 园豆:410 (菜鸟二级) | 2016-10-24 13:54

多谢指导!

荆棘人 | 园豆:410 (菜鸟二级) | 2017-02-14 10:17
其他回答(1)
0

这东西一般都是字典啊。

顾晓北 | 园豆:10844 (专家六级) | 2016-11-02 10:15

什么意思?都是字典?

支持(0) 反对(0) 荆棘人 | 园豆:410 (菜鸟二级) | 2016-11-03 15:25

@荆棘人: 而且你那不是有代码么?字典。。。

支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2016-11-03 15:35

@顾晓北: 说的太笼统,不明白你说的啥意思。请详细说一说,谢谢。

支持(0) 反对(0) 荆棘人 | 园豆:410 (菜鸟二级) | 2016-11-05 11:18

@荆棘人: 就是哪个字对应哪个字母是你自己定好的。。。

支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2016-11-07 16:46

@顾晓北: 不是的,这个是本质是取名字的,所有字的首字母,进行排序。主要有两点:

1)如果根据字的对应的一个“”编码“”解析成与26个英文字母属于的对应关系,然后用来排序,这个原理是什么,我想知道!!

2)但是因为姓氏中有的字是多音字需要纠正,所以要纠正排序;这一条我已经知道怎么弄了。

支持(0) 反对(0) 荆棘人 | 园豆:410 (菜鸟二级) | 2016-11-07 20:40

@荆棘人: 排序默认你根据汉字排序,就是根据编码排序,而不是什么26个字母对应关系,只是因为汉字编码的时候正好是根据字母那么排了而已,不过这样有一个点要说一下:那就是,多音字只排一次。。。

支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2016-11-08 08:51

@顾晓北: 谢谢指导!

支持(0) 反对(0) 荆棘人 | 园豆:410 (菜鸟二级) | 2017-02-14 10:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册