我需要比较两个字符串,其中一个使用“?”通配符。
如果模式为e?lo
且字符串为hello
,则比较函数应返回true。
我正在考虑使用递归方法,但它显然只在匹配覆盖整个输入字符串时才有效。什么是正确的解决方案?
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#define MAX 100
bool WildCmp(char *pattern, char *string);
int main(void)
{
char pattern[MAX];
char string[MAX];
printf("What is the pattern?\n");
fgets(pattern, MAX, stdin);
printf("What is the string?\n");
fgets(string, MAX, stdin);
if(WildCmp(pattern, string))
printf("Match Found\n");
else
printf("Match Not Found");
return 0;
}
bool WildCmp(char *pattern, char *string)
{
if (*pattern=='\0' && *string=='\0')
return true;
if (*pattern != '\0' && *pattern != *string)
return WildCmp(pattern, string+1);
if (*pattern=='?' || *pattern==*string)
return WildCmp(pattern+1,string+1);
if (*pattern=='*')
return WildCmp(pattern+1,string) || WildCmp(pattern,string+1);
return false;
}