当前位置:编程学习 > C#/ASP.NET >>

拼音首字母转汉字

网上找了找,只有汉字转拼音首字母的程序,却没有拼音首字母转汉字的程序.
是不是没办法实现? --------------------编程问答-------------------- 输入法... --------------------编程问答-------------------- 拼音首字转汉字????

这个有啥用,难道是输入法??? --------------------编程问答--------------------

  /// <summary> 
    /// 把汉字转换成拼音第一个字母 
    /// </summary> 
    /// <param name="ChineseStr">中文字符串 </param> 
    /// <returns>返回首拼音字母 </returns> 
    public static string ChineseCap(string ChineseStr) 
    { 
        string Capstr = ""; 
        byte[] ZW = new byte[2]; 
        long ChineseStr_int; 
        string CharStr, ChinaStr = ""; 
        for (int i = 0; i <= ChineseStr.Length - 1; i++) 
        { 
            CharStr = ChineseStr.Substring(i, 1).ToString(); 
            ZW = System.Text.Encoding.Default.GetBytes(CharStr); 
            // 得到汉字符的字节数组 
            if (ZW.Length == 2) 
            { 
                int i1 = (short)(ZW[0]); 
                int i2 = (short)(ZW[1]); 
                ChineseStr_int = i1 * 256 + i2; 

                #region 参数 
                //table of the constant list 
                // 'A';      //45217..45252 
                // 'B';      //45253..45760 
                // 'C';      //45761..46317 
                // 'D';      //46318..46825 
                // 'E';      //46826..47009 
                // 'F';      //47010..47296 
                // 'G';      //47297..47613 

                // 'H';      //47614..48118 
                // 'J';      //48119..49061 
                // 'K';      //49062..49323 
                // 'L';      //49324..49895 
                // 'M';      //49896..50370 
                // 'N';      //50371..50613 
                // 'O';      //50614..50621 
                // 'P';      //50622..50905 
                // 'Q';      //50906..51386 

                // 'R';      //51387..51445 
                // 'S';      //51446..52217 
                // 'T';      //52218..52697 
                //没有U,V 
                // 'W';      //52698..52979 
                // 'X';      //52980..53640 
                // 'Y';      //53689..54480 
                // 'Z';      //54481..55289 

                #endregion 

                #region 判断 
                if ((ChineseStr_int >= 45217) && (ChineseStr_int <= 45252)) 
                { 
                    ChinaStr = "A"; 
                } 
                else if ((ChineseStr_int >= 45253) && (ChineseStr_int <= 45760)) 
                { 
                    ChinaStr = "B"; 
                } 
                else if ((ChineseStr_int >= 45761) && (ChineseStr_int <= 46317)) 
                { 
                    ChinaStr = "C"; 

                } 
                else if ((ChineseStr_int >= 46318) && (ChineseStr_int <= 46825)) 
                { 
                    ChinaStr = "D"; 
                } 
                else if ((ChineseStr_int >= 46826) && (ChineseStr_int <= 47009)) 
                { 
                    ChinaStr = "E"; 
                } 
                else if ((ChineseStr_int >= 47010) && (ChineseStr_int <= 47296)) 
                { 
                    ChinaStr = "F"; 
                } 
                else if ((ChineseStr_int >= 47297) && (ChineseStr_int <= 47613)) 
                { 
                    ChinaStr = "G"; 
                } 
                else if ((ChineseStr_int >= 47614) && (ChineseStr_int <= 48118)) 
                { 

                    ChinaStr = "H"; 
                } 

                else if ((ChineseStr_int >= 48119) && (ChineseStr_int <= 49061)) 
                { 
                    ChinaStr = "J"; 
                } 
                else if ((ChineseStr_int >= 49062) && (ChineseStr_int <= 49323)) 
                { 
                    ChinaStr = "K"; 
                } 
                else if ((ChineseStr_int >= 49324) && (ChineseStr_int <= 49895)) 
                { 
                    ChinaStr = "L"; 
                } 
                else if ((ChineseStr_int >= 49896) && (ChineseStr_int <= 50370)) 
                { 
                    ChinaStr = "M"; 
                } 

                else if ((ChineseStr_int >= 50371) && (ChineseStr_int <= 50613)) 
                { 
                    ChinaStr = "N"; 

                } 
                else if ((ChineseStr_int >= 50614) && (ChineseStr_int <= 50621)) 
                { 
                    ChinaStr = "O"; 
                } 
                else if ((ChineseStr_int >= 50622) && (ChineseStr_int <= 50905)) 
                { 
                    ChinaStr = "P"; 

                } 
                else if ((ChineseStr_int >= 50906) && (ChineseStr_int <= 51386)) 
                { 
                    ChinaStr = "Q"; 

                } 

                else if ((ChineseStr_int >= 51387) && (ChineseStr_int <= 51445)) 
                { 
                    ChinaStr = "R"; 
                } 
                else if ((ChineseStr_int >= 51446) && (ChineseStr_int <= 52217)) 
                { 
                    ChinaStr = "S"; 
                } 
                else if ((ChineseStr_int >= 52218) && (ChineseStr_int <= 52697)) 
                { 
                    ChinaStr = "T"; 
                } 
                else if ((ChineseStr_int >= 52698) && (ChineseStr_int <= 52979)) 
                { 
                    ChinaStr = "W"; 
                } 
                else if ((ChineseStr_int >= 52980) && (ChineseStr_int <= 53640)) 
                { 
                    ChinaStr = "X"; 
                } 
                else if ((ChineseStr_int >= 53689) && (ChineseStr_int <= 54480)) 
                { 
                    ChinaStr = "Y"; 
                } 
                else if ((ChineseStr_int >= 54481) && (ChineseStr_int <= 55289)) 
                { 
                    ChinaStr = "Z"; 
                } 

                #endregion 

            } 
            else 
            { 
                Capstr = ChineseStr; 
                break; 
            } 

            Capstr = Capstr + ChinaStr; 
        } 


        return Capstr; 

    } 

http://topic.csdn.net/u/20090625/17/33994538-ceea-4db4-93e9-06ac1aa4f8d5.html --------------------编程问答-------------------- 应该是没办法实现 --------------------编程问答-------------------- 拼音首字母只有26个,就转26个汉字? --------------------编程问答-------------------- mark --------------------编程问答-------------------- 学过语文的人都应该知道这是不可能的....

即使是汉字转拼音,在多音字的干扰下也是错漏百出 --------------------编程问答-------------------- 不是做输入法。
原意是想,用户在文本框中输入"BJ",页面列出数据库中首字母为"BJ"的所有城市,例如"北京"等等。
--------------------编程问答-------------------- 如果没办法用程序转,我只好把数据库里再加一列"城市首字母"了。几千个城市,改起来.... --------------------编程问答--------------------
引用 9 楼 leozhouster 的回复:
如果没办法用程序转,我只好把数据库里再加一列"城市首字母"了。几千个城市,改起来....

几千个城市...你知道汉字有多少个吗?

你这种需求很常见,只有建字典一条路可走,把拼音首字母当作什么都不是的符号来处理... --------------------编程问答-------------------- 那是汉字转拼音首字母的功能呀

就是判断 输入的BJ 是否和 数据库中 城市名称汉字的首字母 相等,这个可以实现的,微软也有这个库,上面的的那个例子也可以实现,可能效率没有楼上建字典高 --------------------编程问答-------------------- 多音字比较麻烦,不过声母不同的多音字应该不多,看你怎么考虑了,可以多音字的也显示出来,虽然可能是错误的城市读音 --------------------编程问答-------------------- 肯定要将城市表中加一列存储汉字的简拼,每次输入简拼时对此列进行模糊查找。

不加字段也可以,但每次输入拼音时都要将城市转成简拼,再进行模糊查找,这样更不合理。 --------------------编程问答-------------------- 基本同意:难以实现 --------------------编程问答-------------------- 建库是唯一的办法 --------------------编程问答--------------------
引用 8 楼 leozhouster 的回复:
不是做输入法。
原意是想,用户在文本框中输入"BJ",页面列出数据库中首字母为"BJ"的所有城市,例如"北京"等等。

前面不是有由汉字得到拼音的程序吗!修改一下应该比较方便得到汉字的首字母 --------------------编程问答-------------------- 先看下 --------------------编程问答-------------------- 没有什么是不可能。。。。一起研究。。。 --------------------编程问答-------------------- up --------------------编程问答-------------------- 收藏 --------------------编程问答-------------------- 有点难啊 --------------------编程问答--------------------
引用 15 楼 jzaleph 的回复:
建库是唯一的办法



同意~~~ --------------------编程问答-------------------- 建个库,在检索 --------------------编程问答-------------------- 看大家都很赞成建库,能否说的具体点? --------------------编程问答-------------------- 支持。。。 --------------------编程问答-------------------- 写的太好了 --------------------编程问答-------------------- 写的真好 佩服 --------------------编程问答-------------------- 这种情况几乎是不可能的,一个字母不知道会对应多少个汉字,如果像区位码那样一一对应还好办 --------------------编程问答-------------------- 这个简单啊.你先在数据库中添加一列助记码,然后把城市的首字母填到助记码列上(用上面提到的方法或是微软的一个组件),下次查找的时候用以助记码为关键字查找不就行了吗?
把城市的首字母填到助记码列上:这个也可以写个小程序,循环一下,不就行了? --------------------编程问答-------------------- 发挥思维的话可以想象用 字母组合完成汉字 但是这个难度太高了 --------------------编程问答-------------------- 研究研究吧应该是建数据库 --------------------编程问答-------------------- 顶下 --------------------编程问答-------------------- 去 天空收一下嘛 --------------------编程问答-------------------- --------------------编程问答-------------------- mark --------------------编程问答-------------------- 只能建库 --------------------编程问答-------------------- 对实际用途表示疑问! --------------------编程问答--------------------
 肯定是可以实现的,我们在网上查找火车票的时候,

 可以输入拼音的首字母,然后就会列出城市的拼音首字母相同的城市名称

 我想查过火车票的人都应该会遇到过吧
  --------------------编程问答-------------------- http://blog.csdn.net/bohut/archive/2004/10/29/157911.aspx
delphi的代码,那个API应该是win32的,没怎么看懂 --------------------编程问答-------------------- 好 --------------------编程问答-------------------- http://bbs.pep.com.cn/thread-389635-1-8.html
这个也可以参考下,vb的 --------------------编程问答-------------------- 为什么好多我下不下来呢!积分都用光了5555555555555555555555555555555 --------------------编程问答-------------------- --------------------编程问答-------------------- 有点意思,不过不知道这个在什么情况下使用 --------------------编程问答-------------------- 实现你的功能是可以的!
我认为最好的方法是在你的城市例表上加一个存储拼音的例(当然如果要支持五笔就加个五笔例)
后在向数据库存储数据是就根据一个函数把简码存入哪个例(当然由于多营字的问题和每个地区读字的习惯建议做一个教正窗口),在需要读数时就使用sql的例模糊查找功能
例: select 城市名 from 表名  where 拼音例 like '%你数据的简码%'
这个语句是oracle的格式支持模糊查找! --------------------编程问答-------------------- hao --------------------编程问答-------------------- up --------------------编程问答-------------------- mark --------------------编程问答-------------------- 要么就在入库的时候,有一个拼音简码 --------------------编程问答-------------------- csdn貌似有·你搜索一下~ --------------------编程问答-------------------- 有没有什么可行的解决方案? --------------------编程问答-------------------- 有没有什么可行的解决方案? --------------------编程问答-------------------- 2楼那段代码很好啊。 --------------------编程问答-------------------- 要建库。 --------------------编程问答-------------------- 用数据库的话会不会慢 --------------------编程问答-------------------- 用输入法不行么? --------------------编程问答-------------------- 基本上是不可能的吧
只能建库来解决 --------------------编程问答-------------------- 不知道呢
LZ是想搞过输入法吗?

--------------------编程问答-------------------- 好 --------------------编程问答-------------------- google的联想搜索是不是有这个功能,百度的貌似也有 --------------------编程问答-------------------- 这个功能之前见到过,当时想应该是另外加了一列来存储城市简称。在进行查询的时候可以进行模糊匹配。
楼上其它人提到的字典实际上也是这个原理。

你可以看下luncene.也可以用luncene.net建索引。 --------------------编程问答-------------------- 等你结贴我来看一下 --------------------编程问答-------------------- 如果数量少的话可以用穷举法 --------------------编程问答-------------------- --------------------编程问答-------------------- nan --------------------编程问答-------------------- 3楼的方法,如果传入的是汉字+\\  好像判断就有误哦!  比如传入:     周杰伦是SB\\ --------------------编程问答-------------------- 顶个 研究中 --------------------编程问答-------------------- --------------------编程问答-------------------- UP,不可能没法实现。
         输入法,不是可以实现首字母转汉字吗?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,