/* 题目 1)简介 输入:正则表达式字符串 待匹配字符串,如果输入”### ###”程序终止, 输出:如匹配成功,输出整个字符串,如果匹配不成功,输出lost,然后等待下一次用户的输入。 ^ 代表字符串开始 . 代表任意字符 $ 代表字符串末尾 2)参考输入,输出 ^a.$ abc ←regular express and target string (separate by space),input lost ←result, output ab.$ ababc ←regular express and target string (separate by space), input ababc ←match successfully, print the target string, output ### ### ←input ### ### 结束整个程序 */ #include <stdio.h> #include <string.h> #define X 20 int main() { int i,j,x1,x2,u,flag,ret,w; char str1[X],str2[X]; for(u=0;;u++) { scanf("%s",str1); scanf("%s",str2); x1=strlen(str1); x2=strlen(str2); flag=0; if(x1==3&&x2==3) { for(i=0;i<3;i++) { if(str1[i]!='#'||str2[i]!='#') flag++; } if(flag==0) return 0; } if(str1[0]=='^')/*1&2*/ { if(str1[x1-1]=='$') { if(x1==x2+2) for(i=1;i<x1-1;i++) { if(str1[i]!='.') { if(str1[i]!=str2[i-1]) { printf("lost\n"); break; } else { if(i==x1-2) { puts(str2); break; } } } else continue; } else printf("lost\n"); } else/*2*/ { if(x2<x1-1) printf("lost\n"); else for(i=1;i<x1;i++) { if(str1[i]!='.') { if(str1[i]!=str2[i-1]) { printf("lost\n"); break; } else if(i==x1-1) { puts(str2); break; } } else continue; } } } else/*3&4*/ { if(str1[x1-1]=='$')/*3*/ { if(x2<x1-1) printf("lost\n"); else { for(i=x1-2;i>=0;i--) { if(str1[i]!='.') { if(str1[i]!=str2[x2-x1+i+1]) { printf("lost\n"); break; } else { if(i==0) { puts(str2); break; } } } } } } else/*4*/ { ret = 0; if(x1>x2) printf("lost\n"); else { for(w=0;w<x1;w++) if(str1[w]!=0) break; for(j=w;j<x2;j++) { if(str1[w]==str2[j]) for(i=1;i<x1-w;i++) { if(str1[i+w]!='.') { if(str1[i+w]!=str2[i+j]) break; else { if(i+w==x1-1) { ret=1; puts(str2); } } } } if(ret==1) break; } if(ret!=1) printf("lost\n"); } } } } return 0; }