制作一个程序,用于匹配两个字符串是否完全相同。

3
我正在尝试制作一个比较两个字符串的程序。如果它们完全相同,我想要匹配 *s1*s2 。但是,如果 s2 包含星号 (’*’),我们可以将此星号替换为任何字符串(甚至为空),以使 s1s2 相同,并且 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"));
    }

Victor:这段代码是用C编写的,而不是C++ - ani627
编写那个程序比听起来要难得多(特别是如果您允许多个 * 字符)。 - Martin York
你没有收到编译器错误吗?“error: empty character constant” if(*s1 != '\0' && s2 == '') - Paul Hankin
Lennart提出了如何修复您的程序以进行编译和运行的建议,但即使如此,您实现的算法在最坏情况下也以指数时间运行。 identic(“********************a”,“********************b”)是一个很好的测试用例。 https://swtch.com/~rsc/regexp/regexp1.html描述了一种用于一般正则表达式匹配的线性时间算法,从中您可以找出如何专门用于全局匹配。 - Paul Hankin
1个回答

2

当我将s2 == ''替换为*s2 == '*',并且将#include替换为#include <stdio.h>时,您的代码似乎可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接