我正在尝试制作一个比较两个字符串的程序。如果它们完全相同,我想要匹配
例如,
*s1
和 *s2
。但是,如果 s2
包含星号 (’*’)
,我们可以将此星号替换为任何字符串(甚至为空),以使 s1
和 s2
相同,并且 s2
可以包含尽可能多的星号。例如,
"main.c"
和 "*. c"
可以匹配,因为可以将 ’*’
替换为字符串 "main"
以使这两个字符串相同。我目前所尝试的可以在下面的代码中看到: #include
int identic(char *s1, char *s2)
{
if(*s1 != '\0' && s2 == '')
return (identic(s1 + 1, s2) || identic(s1, s2 + 1));
if(*s1 == '\0' && s2 == '')
return (identic(s1, s2 + 1));
if(*s1 == *s2 && *s2 != '\0' && *s2 != '\0')
return (identic(s1 + 1, s2 + 1));
if(*s1 == *s2 && *s1 == '\0' && *s2 == '\0')
return (1);
return (0);
}
int main() {
printf("%c\n", identic("asfd", "f"));
}
C
编写的,而不是C++
。 - ani627*
字符)。 - Martin Yorkif(*s1 != '\0' && s2 == '')
- Paul Hankinidentic(“********************a”,“********************b”)
是一个很好的测试用例。 https://swtch.com/~rsc/regexp/regexp1.html描述了一种用于一般正则表达式匹配的线性时间算法,从中您可以找出如何专门用于全局匹配。 - Paul Hankin