题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6170
正则表达式在C++11以上支持
其实题目里所说的匹配就是正则表达式的匹配,首先看几个正则表达式的内容:
\num
|
匹配num,其中num是一个正整数。对所获取的匹配的引用。例如,“(.)\1”匹配两个连续的相同字符。
|
( ) | 将( 和 ) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到\9 的符号来引用。 |
.点
|
匹配除“\r\n”之外的任何单个字符。要匹配包括“\r\n”在内的任何字符,请使用像“[\s\S]”的模式。
|
头文件:#include<regex>
#include <iostream> #include<regex> #include<cstring> using namespace std; int N,m,n,t; char a[10111],b[11111],c[10111]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%s",a+1); scanf("%s",b+1); int la=strlen(a+1); int lb=strlen(b+1);a[0]=b[0]=c[0]='#'; int lc=1; int cc=1; for(int t=1;t<=lb;t++) { if(b[t] == '*' && b[t-1] =='.') { lc+=sprintf(c+lc-1,"(.)\\%d*",cc++)-1; } else c[lc++] = b[t]; } c[lc]=0; // cout<<a<<endl; // cout<<b<<endl; // cout<<c<<endl; if(regex_match(a,regex(c))) printf("yes\n"); else printf("no\n"); } return 0; } /* 3 aa a* abb a.* abb aab */