添加数据时。如果存在分歧的字母,比如0和o,2和Z或z。,9和g 括这些字母的,也同时添加。比如。我输入的是 ABZ ,表里同时添加两条:ABZ 与AB2如果输入的是AZBZ,表里同时添加:A2BZ  AZB2  AZBZ 如果输入的是AZBZCZ,表里同时添加 A2BZCZ A2B2CZ A2B2C2  AZB2CZ AZBZC2  A2BZCZ  A2BZC2 这个怎么弄啊
!   List<string> list = new List<string>();
            string s = "AZBZCZ";
            string a = "Z";            if (s.Contains(a))
            {
                string strr = s.Replace(a, "");
                int ac = (s.Length - strr.Length) / a.Length;//查询出Z在里面出现的次数                for (int i = 0; i < ac; i++)
                {
                    int l = s.IndexOf(a);
                    if (l > -1)
                    {
                        s = s.Substring(0, l) + "2" + s.Substring(l + a.Length);
                        list.Add(s);
                    }
                }
            }这个只能获取到前三个 A2BZCZ A2B2CZ A2B2C2   其余的该怎么取呢?
         

解决方案 »

  1.   

    统计出来需要替换的字母的数量(字母相同,位置不同算2个)。
    总的排列数是2的n次方for(i = 0 to pow(2,N){
       逐个替换对应位置的字符( 建立i和当前字符串的索引对应关系)
    }
      

  2.   

    string strvalue = "AZBZCZg";
                string a = "Z";            List<string> list = new List<string>();            for (int i = 0; i < strvalue.Length; i++)
                {
                    if (strvalue[i].ToString().Equals(a))
                    {
                        string abc = strvalue.Substring(0, i) + "2" + strvalue.Substring(i + 1);//A2BZCZ  AZB2CZ   AZBZC2
                        list.Add(abc);
                      
                        string strr = abc.Replace(a, "");
                        int ac = (abc.Length - strr.Length) / a.Length;//查询出Z在里面出现的次数                    for (int t = 0; t < ac; t++)
                        {
                            int l = abc.IndexOf(a);
                            if (l > -1)
                            {
                                abc = abc.Substring(0, l) + "2" + abc.Substring(l + a.Length);
                                if (!list.Contains(abc))//数组里又相同的排除
                                {
                                    list.Add(abc);
                                }
                            }
                        }
                    }
                }
    这样可以遍历出所有的,不过如果字符串输入的是"AZBZCZg"  g在这里可以认为是9 ,那么对应的呢?怎么弄哦~!
      

  3.   

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<List<char>> simchr = new List<List<char>>()
                { 
                    new List<char>() { '0', 'o' },
                    new List<char>() { '2', 'z' },
                    new List<char>() { 'g', 'q', '9' }
                };
                string source = "22az9";
                string source1 = string.Join("", source.Select((x, i) => simchr.Any(y => y.Any(z => z == x)) ? "{" + simchr.Single(y => y.Any(z => z == x)).FirstOrDefault() + ":" + i.ToString() + "}" : x.ToString()));
                IEnumerable<string> query = new string[] { source1 };
                while (Regex.IsMatch(query.First(), @"\{\w:\d+\}"))
                {
                    string s = Regex.Match(query.First(), @"\{(\w):\d+\}").Value;
                    string c = Regex.Match(query.First(), @"\{(\w):\d+\}").Groups[1].Value;
                    query = query.SelectMany(x => simchr.First(y => y.First().ToString() == c).Select(y => x.Replace(s, y.ToString())));
                }
                foreach (var item in query)
                {
                    Console.WriteLine(item);
                }
            }
        }
    }22a2g
    22a2q
    22a29
    22azg
    22azq
    22az9
    2za2g
    2za2q
    2za29
    2zazg
    2zazq
    2zaz9
    z2a2g
    z2a2q
    z2a29
    z2azg
    z2azq
    z2az9
    zza2g
    zza2q
    zza29
    zzazg
    zzazq
    zzaz9
    Press any key to continue . . .