ArrayList al = new ArrayList();
al.Add("c");
al.Add("i");
al.Add("sh");
al.Add("ou");
al.Add("s");
al.Add("iaw");
al.Add("ian");
有这样一个数组,如果用户在textBox里输入cishou sian,要安照al里面的字母进行分割,并把分割出来的字符存到另一个数组里,应该怎么做?就是分割为c i sh ou s ian,这几个字符要存到一个数组里
al.Add("c");
al.Add("i");
al.Add("sh");
al.Add("ou");
al.Add("s");
al.Add("iaw");
al.Add("ian");
有这样一个数组,如果用户在textBox里输入cishou sian,要安照al里面的字母进行分割,并把分割出来的字符存到另一个数组里,应该怎么做?就是分割为c i sh ou s ian,这几个字符要存到一个数组里
string str="";
List<string> lst=new List<string>();
for(int i=0;i<s.Length;i++)
{
if(!al.Contains(s[i]))
str+=s[i];
else
{
lst.Add(str);
str="";
}
}
然后对输入的拼音--text进行循环遍历:
这个遍历还应该要符合拼音的拼法,比如前两个字母有可能是sh、ch…… 最开始不能单单从1个字母的拼音开始遍历……所有拼音的拼法条件筛选完之后,对text进行一次穷举,将筛选出来的结果放到一个数组中。
筛选条件很多,容易漏条件的!楼主小心了……
嗬嗬嗬……
string[] ret=str.Split(new char[]{','},StringSplitOptions.RemoveEmptyEntries);
还要考虑二义性,有些字母同时可作为声亩或韵母,例如 changan 是长安还是产感?
2.给定的要操作的字符串(除空格),如string str="cishou sian",其中的字符必须全部存在于al中。鉴于以上特点,需要进行如下处理过程:1.将al按照string成员的length由大到小重新排序
2.定义新的arraylist ret用于保存分割后的字符串
3.遍历al中成员,将给定的字符串str用Contains()方法判断al[i]是否存在,存在则将其去掉,同时执行ret.Add(al[i].ToString())方法保存提取出来的字符串。完整代码如下:ArrayList al = new ArrayList();
al.Add("c");
al.Add("i");
al.Add("sh");
al.Add("ou");
al.Add("s");
al.Add("iaw");
al.Add("ian"); //对al成员字符串长度进行重新排序,长度由大到小
for (int i = 0; i < al.Count; i++)
{
for (int j = i; j < al.Count; j++)
{
if (al[i].ToString().Length < al[j].ToString().Length)
{
string temp = al[i].ToString();
al[i] = al[j];
al[j] = temp;
}
}
}
//给定要处理的字符串
string str = "cishou sian";
//定义ret来保存分割后的字符串
ArrayList ret = new ArrayList();
//遍历al来匹配,提取,保存
for (int i = 0; i < al.Count; i++)
{
if (str.Contains(al[i].ToString()))
{
str = str.Replace(al[i].ToString(), "");
ret.Add(al[i].ToString());
}
}//在此时ret中就是提取出来的正确结果了
List<string> list = new List<string>();
list.Add("c");
list.Add("i");
list.Add("sh");
list.Add("ou");
list.Add("s");
list.Add("iaw");
list.Add("ian");string s = "cishou sian";List<string> result = new List<string>();foreach (string item in list)
{
if (s.Contains(item))
result.Add(item);
}