版主说难度不大,我再加大难度重新写下说明,看看算法如何写?
//标签类
public Class BiaoqianCollection()
{
public list<Biaoqian> lbq=new list<Biaoqian>();
}
public Class Biaoqian()
{
public string bq=""; //主标签
public list<string> lcontent=new list<string>(); //内容list
}
private List<string> ReplaceBiaoqian(string template,BiaoqianCollection bqcollection)
{
//算法实现
}
public void main()
{
BiaoqianCollection AllBq=new BiaoqianCollection();
Contents new1=new Contents();
new1.bq="A"
new1.lcontent.Add("我你他");
new1.lcontent.Add("甲乙丙");
.......
new1.lcontent.Add("偶倪她");
ALLBq.lbq.add(new1);
Contents new3=new Contents();
new2.bq="B"
new2.lcontent.Add("是");
new2.lcontent.Add("似");
.......
new3.lcontent.Add("乃");
ALLBq.lbq.add(new2);
Contents new3=new Contents();
new3.bq="C"
new3.lcontent.Add("夏商周");
new3.lcontent.Add("秦汉");
.......
new3.lcontent.Add("元明清");
ALLBq.lbq.add("new3");
Contents new4=new Contents();
new4.bq="D"
new4.lcontent.Add("朝");
ALLBq.lbq.add("new4");
Contents new5=new Contents();
new5.bq="E"
new5.lcontent.Add("人男女");
ALLBq.lbq.add("new4");
//下面是要实现的,
string _tmp=""//模版字符串
list<string> lresult=new list<string>();
lresult=ReplaceBiaoqian(string template,BiaoqianCollection bqcollection)
}
模版字符串,格式如下
string template="请注意,第一个人说{A1}{B1}{C2}{D1}{E1},他过来了。第二个人说他不是{C2}{D1}和{C1}{E2}"; //模版字符串是这样类型的。
A1 代表 ALLBq.lbq中bq="A"的BiaoQian,1代表这个Biaoqian中每一个lcontent的字符串的第一个字。 上述这个template经过ReplaceBiaoqian产生的lresult应该含有如下数量的字符串:bq="A"的有m个字符串,bq="B"的有n个字符串,bq="C"的有x个字符串bq="D"的有y个字符串bq="E"的有z个字符串那么就要生成的_result.count=m*n*x*d*e个字符串。 算法
[解决办法]
其实你这个的根本就是如何解析出{}中的内容,正则 (?is)(?<=\{)[^\{\}]+(?=\})+,并且分离出字母和数字,有了他们,后面的事还算事吗,就剩下匹配了吧,linq或者遍历比对都可以
分离内容及分离字母和数字都可用正则
[解决办法]
额,基本还是没啥难度,纯粹的机械代码。前半截纯粹的机械代码,正则也好,词法分析也罢。完全的不需要想的机械代码,后半截组合部分也是简单的笛卡尔积。
这题目如果你大一的基本编译原理,基本集合论没翘课的话,估计15分钟内能写出正常解出来
[解决办法]
思路都有了,我建议你自己先动手试着写写
BTW: Biaoqian 用Tag来代替多好啊,中文拼音看着很尴尬