#笔试#字符串 匹配 正则表达式 C++

同学去上海同济城市规划设计研究院时要求上机写的题目

写一个函数boolfun(char*T,char*S)

T为模板字符串,其中*号代表1到n个任意字符,S为匹配字符串。如果匹配返回TRUE,反之,FALSE。

例如:

ab*和abc匹配

ab*和acd不匹配

a*bc和adebc匹配

a*bc和adebce不匹配

a*bc和a***bc匹配

b*de*c和bfddsdessscc匹配

这个要用到递归,以下是我搜索网络上参考的一个代码后修改的,都测试通过了给出的例子。#include"stdafx.h"intisMatch(constchar*s,constchar*p){if(!s&&!p){return1;}elseif(!s||!p){return0;}while(*s!='\0'&&*p!='\0'){if((*s==*p)&&(*s!='*')){++s;++p;continue;}elseif(*p=='*'){/*escapeall'*'*/while(*p=='*'){++p;}if(*p=='\0'){return1;}while(*s!='\0'){if(*s==*p&&isMatch(s+1,p+1)){return1;}++s;}}else{return0;}}while(*p=='*'){++p;}if((*p=='\0')&&(*s=='\0')){return1;}return0;}int_tmain(intargc,_TCHAR*argv[]){constchar*str="abc";constchar*pattern="ab*";if(isMatch(str,pattern)){fprintf(stdout,"matchok!\n");}else{fprintf(stdout,"matchfailed!\n");}return0;}之前自己写的没有想到用递归,写得不是很好,最后一个例子没有测试通过。#include"stdafx.h"#includeusingnamespacestd;boolFun(char*T,char*S){boolbSingle=false;while((*T!='\0')&&(*S!='\0')){while((*T==*S)&&(*T!='\0')){++T;++S;}if((*T=='\0')&&(*S!='\0')){returnfalse;}while(*T=='*'){++T;}while(*T!=*S){++S;}}if(*T=='\0'){bSingle=true;}returnbSingle;}int_tmain(intargc,_TCHAR*argv[]){char*T="ab*";char*S="abc";boolbTemp=Fun(T,S);return0;}

相关推荐