字符串匹配问题

字符串1:只含有英文字母,
字符串2:含有英文字母和*,其中符号*表示匹配任意字符0或者多次,即正则表达式里面的含义。
 
现在给定这样的两个串,要求判断是否匹配?
bool isMatch ( const char *str1, const char *str2)
 
例如:str1 = "hello", str2 = "he*o",则二者匹配,返回true,
str1 = "hello", str2 = "he*l",则不匹配,返回false。

代码(改进前的)

 #include <stdio.h> bool isMatch(char *src, char *pattern, int index, int indexPat) { if(src==NULL && pattern==NULL) return true; if(*(src+index)==0 || *(pattern+indexPat)==0) { if(*(pattern+indexPat)=='*') return true; if(*(src+index)==0 && *(pattern+indexPat)==0) return true; else return false; } if(*(src+index)==*(pattern+indexPat)) return isMatch(src, pattern, index+1, indexPat+1); if(*(pattern+indexPat)=='*') { if(*(src+index)==*(src+(index-1))) return isMatch(src, pattern, index+1, indexPat); else if(*(src+index)==*(pattern+indexPat+1)) { return isMatch(src, pattern, index+1, indexPat+2); } } return false; } int main() { char *src = new char[20]; char *pattern = new char[20]; scanf("%s %s",src, pattern); bool flag = isMatch(src, pattern, 0, 0); if(flag) { printf("Match!/n"); } else { printf("No match!/n"); } return 0; }

 

改进后的代码:

*src 返回的是一个char字符,不是字符串,不能用"",只能用''。

*src 返回为0,表示碰见了字符串的结束符"/0"。

#include <stdio.h> bool isMatch(char *src, char *pattern) { if(src==NULL && pattern==NULL) return true; if(*src==0 || *pattern==0) { if(*pattern=='*') return true; if(*src==0 && *pattern==0) return true; else return false; } if(*src==*pattern) return isMatch(src+1, pattern+1); if(*pattern=='*') { if(*src==*(src-1)) return isMatch(src+1, pattern); else if(*src==*(pattern+1)) { return isMatch(src+1, pattern+2); } } return false; } int main() { char *src = new char[20]; char *pattern = new char[20]; scanf("%s %s",src, pattern); bool flag = isMatch(src, pattern); if(flag) { printf("Match!/n"); } else { printf("No match!/n"); } return 0; }

你可能感兴趣的:(正则表达式,null)