如何检查2个字符串是否与包含' *'可以替换所有字符串或字符串?

时间:2018-03-25 17:01:00

标签: c string-matching

我正在寻找提示,以帮助我提出解决方案我尝试了很多算法,但似乎没有一个算法适用于所有情况。我知道有一个递归解决方案构建了几行的功能,但我无法想出它。

以下是说明:

  

此函数的目的是确定两个字符串是否匹配。

     
      
  • 当s1和s2相同时,s1和s2被认为匹配。

  •   
  • 如果s2包含一个星号(’*’),我们可以用任何字符串(甚至为空)替换此星号,以使s1和s2相同。

  •   
  • s2可能会拥有您想要的任意数量的星星。

  •   
  • 例如,"main.c""*.c"匹配,因为可以用字符串’*’替换"main"以使这两个字符串相同。

  •   
  • 以下是原型的制作方法:   int match(char * s1,char * s2);

  •   
  • 如果s1和s2匹配则必须返回1,否则返回0。

  •   

我的功能将在C。

困难的案例是:

s1 = "abcde" & s2 = "a*e*d"
s1 = "abcdecde" & s2 = "a*e"

1 个答案:

答案 0 :(得分:0)

这是一个你真正赢得2001年IOCCC的全球比赛者:

main(int c,char**v){return!m(v[1],v[2]);}
m(char*s,char*t){return*t-42?*s?63==*t|*s==*t&&m(s+1,t+1):!*t:m(s,t+1)||*s&&m(s+1,t);}

除了*之外,它还明白了{em>只有一个字符的?。剥离?支持应该是一个有趣的练习:-)阅读hints可能会有所帮助。