博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汉字获取首字母多音字
阅读量:6139 次
发布时间:2019-06-21

本文共 5227 字,大约阅读时间需要 17 分钟。

//DEMO
 
 
using Microsoft.International.Converters.PinYinConverter;using System;using System.Collections.Generic;using System.Collections.ObjectModel;using System.Linq;using System.Text;using System.Text.RegularExpressions;using System.Threading.Tasks;namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            List
ss = GetPYAll("其他"); //输出集合为 qi-ta ji-ta 然后再截取就好了 } ///
/// 获取全拼 /// ///
///
返回一个多音集合(如:其原本多音字为 qi ji 输入“其他”返回qita jita)
public static List
GetPYAll(string str) { List
soruceList = new List
(); //用来组合的拼音集合 List
list = new List
(); //每个位置对应的拼音集合 Dictionary
> dic = new Dictionary
>(); char[] chars = str.ToCharArray(); for (int i = 0; i < chars.Length; i++) { List
tempList=new List
(); if (new Regex(@"^[\u4e00-\u9fa5]+$").Match(chars[i].ToString()).Success) { ChineseChar chineseChar = new ChineseChar(chars[i]); ReadOnlyCollection
pyColl = chineseChar.Pinyins; //循环生成首字母的笛卡尔积,存储到临时拼音列表 foreach (var item in pyColl) { if (item != null) { string temp = item.Remove(item.Length - 1, 1); list.Add(temp); if(!tempList.Contains(temp)) { tempList.Add(temp); } } } } else//不是汉字的 { tempList.Add(chars[i].ToString()); list.Add(chars[i].ToString()); } dic.Add(i, tempList); } //组合 List
lst_Combination = PermutationAndCombination
.GetCombination(list.ToArray(), str.Length); //求取组合中以第一个字的拼音开头的 foreach (string[] strs in lst_Combination) { bool b = false; for (int i = 0; i < strs.Length; i++) { if (dic[i].Contains(strs[i])) { b = true; } else { b = false; break; } } if (b) { soruceList.Add(string.Join("-", strs)); } } return soruceList; } }}

 

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication1{    public class PermutationAndCombination
{ ///
/// 交换两个变量 /// ///
变量1 ///
变量2 public static void Swap(ref T a, ref T b) { T temp = a; a = b; b = temp; } ///
/// 递归算法求数组的组合(私有成员) /// ///
返回的范型 ///
所求数组 ///
辅助变量 ///
辅助变量 ///
辅助数组 ///
辅助变量M private static void GetCombination(ref List
list, T[] t, int n, int m, int[] b, int M) { for (int i = n; i >= m; i--) { b[m - 1] = i - 1; if (m > 1) { GetCombination(ref list, t, i - 1, m - 1, b, M); } else { if (list == null) { list = new List
(); } T[] temp = new T[M]; for (int j = 0; j < b.Length; j++) { temp[j] = t[b[j]]; } list.Add(temp); } } } ///
/// 递归算法求排列(私有成员) /// ///
返回的列表 ///
所求数组 ///
起始标号 ///
结束标号 private static void GetPermutation(ref List
list, T[] t, int startIndex, int endIndex) { if (startIndex == endIndex) { if (list == null) { list = new List
(); } T[] temp = new T[t.Length]; t.CopyTo(temp, 0); list.Add(temp); } else { for (int i = startIndex; i <= endIndex; i++) { Swap(ref t[startIndex], ref t[i]); GetPermutation(ref list, t, startIndex + 1, endIndex); Swap(ref t[startIndex], ref t[i]); } } } ///
/// 求从起始标号到结束标号的排列,其余元素不变 /// ///
所求数组 ///
起始标号 ///
结束标号 ///
从起始标号到结束标号排列的范型
public static List
GetPermutation(T[] t, int startIndex, int endIndex) { if (startIndex < 0 || endIndex > t.Length - 1) { return null; } List
list = new List
(); GetPermutation(ref list, t, startIndex, endIndex); return list; } ///
/// 返回数组所有元素的全排列 /// ///
所求数组 ///
全排列的范型
public static List
GetPermutation(T[] t) { return GetPermutation(t, 0, t.Length - 1); } ///
/// 求数组中n个元素的排列 /// ///
所求数组 ///
元素个数 ///
数组中n个元素的排列
public static List
GetPermutation(T[] t, int n) { if (n > t.Length) { return null; } List
list = new List
(); List
c = GetCombination(t, n); for (int i = 0; i < c.Count; i++) { List
l = new List
(); GetPermutation(ref l, c[i], 0, n - 1); list.AddRange(l); } return list; } ///
/// 求数组中n个元素的组合 /// ///
所求数组 ///
元素个数 ///
数组中n个元素的组合的范型
public static List
GetCombination(T[] t, int n) { if (t.Length < n) { return null; } int[] temp = new int[n]; List
list = new List
(); GetCombination(ref list, t, t.Length, n, temp, n); return list; } }}

转载地址:http://fgkya.baihongyu.com/

你可能感兴趣的文章
好记性不如烂笔杆-android学习笔记<十六> switcher和gallery
查看>>
JAVA GC
查看>>
codeforce 599B Spongebob and Joke
查看>>
3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
查看>>
9、Dubbo-配置(4)
查看>>
前端第七天
查看>>
图解SSH原理及两种登录方法
查看>>
[转载] 七龙珠第一部——第058话 魔境圣地
查看>>
【总结整理】JQuery基础学习---样式篇
查看>>
查询个人站点的文章、分类和标签查询
查看>>
基础知识:数字、字符串、列表 的类型及内置方法
查看>>
JSP的隐式对象
查看>>
JS图片跟着鼠标跑效果
查看>>
[SCOI2005][BZOJ 1084]最大子矩阵
查看>>
学习笔记之Data Visualization
查看>>
Leetcode 3. Longest Substring Without Repeating Characters
查看>>
【FJOI2015】金币换位问题
查看>>
数学之美系列二十 -- 自然语言处理的教父 马库斯
查看>>
Android实现自定义位置无标题Dialog
查看>>
面试总结
查看>>