獲取輸入漢字的中文讀音

在論壇上看到一個題目:要求輸入一個漢字,輸出這個漢字的所有讀音(不含聲調並去除重複)。

這道題的關鍵在於要使用一個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();
        }
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章