获取输入汉字的中文读音

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

这道题的关键在于要使用一个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();
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值