正则表达式最大匹配与最小匹配

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),是计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。在正则表达式中通常有某个字符可以匹配若干个字符。假设在某程序设计语言的正则表达式中“*”就可以匹配0个或多个字符。比如a*b可以匹配ab,acb,adb,acdb,adkfjgjdkb等等。在字符串acbddbeeebff中,有多个字串可以和a*b匹配,包括acb,acbddb和acbddbeeeb。那么应该选哪个呢?通常有两种策略可选,一种是最小匹配,就是选最短的acb;另一种是贪婪匹配,就是选最长的acbddbeeeb。现在就请你写一段程序根据给定模式串和匹配串分别输出最小匹配和贪婪匹配的结果。

输入:
为2行,每行都是一个字符串,字符串长度均大于等于2且小于等于100。第一行的字符串中包含且仅包含一个“*”,为模式串。也就是说这里的“*”可以匹配0个或多个任意字符。第二行的字符串一定不包含“*”,为待匹配串。

输出:
也为2行,每行都是一个字符串。第一行为最小匹配的结果,第二行为贪婪匹配的结果。

注:一、样例中的最小匹配是aab而不是ab;二本题不允许使用所用语言中现成的字符串处理函数或模块;三测试数据保证有解。

输入样例

a*b
haabaaaabcd

输出样例

aab
aabaaaab




#include<stdio.h>
#include<string.h>
static    char longout[50];
static    char shortout[50];
int main()
{
    char a[4];
    int i,j,k;
    scanf("%s",a);
    char b[100];
    scanf("%s",b);
          for(i=0;i<strlen(b);i++)
    {    
        if(b[i]==a[0]) 
        {
        for(j=i+1;j<strlen(b);j++)
        {
            if(b[j]==a[2])
                break;
        }
        break;
        }
    }
    for    (k=0;i<=j;k++,i++)
    {
        shortout[k]=b[i];
    }
     i=0;j=0;k=0;
    for(i=0;i<strlen(b);i++)
    {    
        if(b[i]==a[0]) 
        break;
    }
    for(j=strlen(b)-1;j>i;j--)
    {
        if(b[j]==a[2])
        break;
    }
    for    (k=0;i<=j;k++,i++)
    {
        longout[k]=b[i];
    }
     printf("%s\n%s",shortout,longout);
 } 

算法很简单,前后分别遍历查找

c的好多语法数据结构我还不是太清楚,感觉光看了书没有实践记不住,应该看些复杂的代码记一下了。

猜你喜欢

转载自www.cnblogs.com/yuhaowang/p/10139908.html