zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    LTE信令流程之Service Request流程介绍
    LTE信令流程之TAU流程介绍
    LTE信令流程之开机附着、去附着流程分析
    Python 数据分析之可视化工具
    LTE信令流程之切换流程介绍
    js获取昨天日期
    在dll中使用 DirectSound,编译能通过,但会出现内存问题,而且不能发声
    在dll中用DirectSound8同时播放多个wav文件不能发声
    第二次作业
    第三次作业
  • 原文地址:https://www.cnblogs.com/yejinru/p/2374753.html
Copyright © 2011-2022 走看看