如何在C中部分比较两个字符串与通配符?

时间:2017-04-04 15:13:40

标签: string pattern-matching wildcard

我需要比较两个字符串,其中一个使用“?”通配符。 如果模式为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;
}

0 个答案:

没有答案