我正在寻找提示,以帮助我提出解决方案我尝试了很多算法,但似乎没有一个算法适用于所有情况。我知道有一个递归解决方案构建了几行的功能,但我无法想出它。
以下是说明:
此函数的目的是确定两个字符串是否匹配。
当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"
答案 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可能会有所帮助。