C语言 正则表达式 查找字符串匹配

/*

题目

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;
}
原文地址:https://www.cnblogs.com/yejinru/p/2374753.html