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

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

获取输入汉字的中文读音相关推荐

  1. 汉字转拼音 - 输入汉字获取其拼音

    转载自: http://www.cnblogs.com/LonelyShadow/p/3543798.html 前不久看到有的朋友实现对商品名称拼音的录入,发现他的实现方式是手动输入的,-_-#.同志 ...

  2. android 只能输入汉字,EditText限制输入的几种方式及只显示中文汉字的做法

    前段时间项目中有个需求是要求只能输入汉字,并且不能输入偏旁部首,于是总结了下EditText限制输入的几种方式,但是对于语音输入的还没找到好的解决方案: 通过设置EditText的inputType来 ...

  3. 计算机中文输入法教案,输入汉字的学习

    输入汉字的学习 汉字输入法 课    题:输入汉字的学习 课    时:1课时 课    型:新授课 教学方法:"任务驱动"教学法 教学用具:计算机 教学背景:对于本年级的学生来说 ...

  4. php 正则 中文英文,php 验证只能输入汉字、英语、数字的正则表达式

    收藏了正则表达式.可以验证只能输入数字.汉字.英语.分开验证了也可以整合一起验证.但是我是拆分开好了.比较好使.可以单独的验证.经过本人测试可以使用的哦!下面就是php 验证只能输入汉字.英语.数字的 ...

  5. php能写入英文不能写入中文,ios,uitextfield_IOS textField怎样设置只能输入英文字母或者数字,不能输入汉字,ios,uitextfield - phpStudy...

    IOS textField怎样设置只能输入英文字母或者数字,不能输入汉字 RT,要弄个输入车牌后5位字符的输入框,车牌后5位只能有数字和字母,我在网上找了很多方法,都有些问题,要么就全都能输入,要么就 ...

  6. keil u5无法输入中文 输入汉字乱码

    keil u5写代码时,无法输入汉字,显示乱码(如下图),参考相关文章,解决了 将默认的"ANSI"换成简体中文, 打开Configuration, 路径:Edit菜单,最后一个菜 ...

  7. python中输入汉字_python输入中文的实例方法

    解决中文输入的两种应用: 在脚本中加语言编码声明 "-*- coding: uft-8 -*-" 应用一:print中出现中文 方法一:用unicode(' ', encoding ...

  8. AutoCompleteTextView输入汉字拼音首字母实现过滤提示(支持多音字)

    AutoCompleteTextView具有输入提示的功能,但是它的这种提示不适合对股票列表的过滤,如果你玩过股票软件,就会知道只要输入股票名称的首字母或股票代码就会出现符合匹配的股票,这种过滤怎么实 ...

  9. python获取输入框内容长度_python3 tkinter 获取输入字符串长度

    python 3  获取输入字符长度 #-*- coding:utf-8 -*- from tkinter import * from tkinter import messagebox def ge ...

最新文章

  1. Oracle嵌套表实例说明
  2. 16.C++中的this指针
  3. Qt Creator构建并运行示例
  4. linux交叉编译无法识别gcc编译器
  5. Codeforces Round #726 (Div. 2) F. Figure Fixing 二分图 + 思维
  6. scala语言示例_var关键字与Scala中的示例
  7. job每分钟执行 oracle_Oracle Job 每个时间点执行示例
  8. delphi mysql 图片_delphi数据库图片的存取 【转】
  9. DCMTK:wwwapp instalation
  10. 基本sql语句--触发器
  11. 队列的JS实现及广度优先搜索(BFS)的实现
  12. Android应用程序消息处理机制(Looper、Handler)分析(3)
  13. mysql注入多语句执行_MySQL注入总结MySQL暴错注入方法整理
  14. JavaScript 根据两点的经纬度坐标,计算实际的直线距离
  15. js去掉字符串的空格
  16. 开源加速器Gemmini代码解析(一):脉动阵列
  17. 360木马查杀后mysql数据不能启动
  18. 人事管理系统之部门结构树的展示
  19. 大数开根 高精度 平方根
  20. Across the great wall we can reach every corner in the world

热门文章

  1. linux服务器实现AD域认证,无线+ACS认证(本地或AD域认证)
  2. Linux——vim退出快捷键
  3. Oracle 分析函数案例
  4. 【科普知识】必备期刊常识
  5. 《红宝石》第3章“基本概念”【上】
  6. mysql myisam 详解_Mysql InnoDB和MyISAM区别原理解析
  7. qfile超过下载文件容量_大容量存储 移动素材包游戏库 英睿达X8便携式SSD 2TB体验_外设产品-商用电器频道-中文科技资讯...
  8. Person p=new student()是什么意思
  9. 如何将Windows的文件存储到铁威马NAS里?
  10. vue wangEditor组件