关于替换字符串的问题

无涯乌鸦五雅 2013-01-21 04:08:23
添加数据时。如果存在分歧的字母,比如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 其余的该怎么取呢?
...全文
242 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2013-01-21
  • 打赏
  • 举报
回复
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 . . .
无涯乌鸦五雅 2013-01-21
  • 打赏
  • 举报
回复
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 ,那么对应的呢?怎么弄哦~!
whrspsoft3723 2013-01-21
  • 打赏
  • 举报
回复
统计出来需要替换的字母的数量(字母相同,位置不同算2个)。 总的排列数是2的n次方 for(i = 0 to pow(2,N){ 逐个替换对应位置的字符( 建立i和当前字符串的索引对应关系) }
bdmh 2013-01-21
  • 打赏
  • 举报
回复
那你还是做个对应字典吧,添加前,先从字典中逐个替换成另一个新的

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧