获取输入汉字的中文读音

来源:互联网 发布:关于利用网络云盘制作 编辑:程序博客网 时间:2024/06/08 13:50

在论坛上看到一个题目:要求输入一个汉字,输出这个汉字的所有读音(不含声调并去除重复)。

这道题的关键在于要使用一个API,由于系统本身并没有默认带这个API的dll文件,所以就去微软下载了一个Microsoft Visual Studio International Pack 。这个包里面包函了东亚部分国家的语言的发音。

然后添加这个dll文件,调用里面的属性和方法就可以得到这个字的读音的集合。但是我们要对输出的读音进行一个处理——不含声调并去除重复。如果输入一个“调”字,不加任何处理的话,就会输出:DIAO4、DIAO5、TIAO2、TIAO4、 、 、 、  ,前面的四个表示读音,其中数字应该是表示声调,后面的四个是空字符。所以我们首先要把空字符去掉,然后再把每个读音后面的数字去掉,最后再去年相同的读音就行了。去空字符可以使用linq查询语句,去掉数字就可以使用正则表达式了,最后去掉相同的部分就可以使用集合的一个Distinct()方法,这样会使代码精简许多。其中,Distinct()方法返回一个IEnumerableCollection集合,输出这个集合里面的元素就OK了。

具体代码如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.InteropServices;      using Microsoft.International.Converters.PinYinConverter;  //引入ChnCharInfo的命名空间using System.Text.RegularExpressions;     //引入正则表达式的命名空间namespace 第三题{    class Program    {        //输入一个汉字输出这个汉字的所有读音(不含声调并去除重复)        static void Main(string[] args)        {            Console.WriteLine("请输入一个汉字:");            //char word = Convert.ToChar(Console.ReadLine());            string hanzi = Console.ReadLine();    //以字符串的形式输入一个汉字                    char word;      //定义一个变量,接收单个字符            if (char.TryParse(hanzi, out word))   //尝试将字符串汉字转换为字符            {                if (ChineseChar.IsValidChar(word))   //调用API函数,检查输入的字符是否为汉字字符                {                    ChineseChar chnc = new ChineseChar(word);  //将汉字字符传入,创建一个ChineseChar对象                    //获取该对象的拼音集合,该集合是一个泛型只读集合                    System.Collections.ObjectModel.ReadOnlyCollection<string> pinyins = chnc.Pinyins;                    //使用linq去掉集合中的null                    IEnumerable<string> strs = from pinyin in pinyins where pinyin != null select pinyin;                    //声明一个集合,用于存储处理好的拼音                    List<string> list = new List<string>();                    foreach (var items in strs)                    {                        string str = Regex.Replace(items.ToLower(), "[0-9]", ""); //使用正则表达式将集合中每个字符串的数字替换为空字符                                              list.Add(str);             //把处理过的字符串添加进list中                        //Console.WriteLine(item);                    }                    //提取list集合中的非重复元素                    IEnumerable<string> duyin = list.Distinct<string>();                    foreach (var item in duyin)        //输出拼音                    {                        Console.WriteLine(item);                    }                }                else                {                    Console.WriteLine("您输入的不是有效汉字字符!");                }            }            else            {                Console.WriteLine("您输入的不是有效汉字字符!");            }                                                            Console.ReadKey();        }    }}