c语言实现字符串通配

2021-05-06  本文已影响0人  一路向后

1.题目描述

问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。
要求:
实现如下2个通配符:
*:匹配0个或以上的字符(字符由英文字母和数字0-9组成,不区分大小写。下同)
?:匹配1个字符

输入:
通配符表达式;
一组字符串。

输出:

返回匹配的结果,正确输出true,错误输出false

2.源码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

short isMatch(const char *s, const char *p)
{
    if(s == NULL || p == NULL)
    {
        return 0;
    }

    short start = 0;
    const char *str = s;
    const char *ptr = p;

    while(*str != 0x00)
    {
        switch(*ptr)
        {
            case '?':
                break;

            case '*':
                start = 1;
                s = str;
                p = ptr;

                while(*p == '*')
                {
                    p++;
                }

                if(*p == 0x00)
                {
                    return 1;
                }

                str = s - 1;
                ptr = p - 1;

                break;

            default:

                if(*str != *ptr)
                {
                    if(!start)
                    {
                        return 0;
                    }

                    s++;
                    str = s-1;
                    ptr = p-1;
                }
        }

        str++;
        ptr++;
    }

    while(*ptr == '*')
    {
        ptr++;
    }

    return (*ptr == 0x00);
}

int main()
{
    const char a[1024];
    const char b[1024];
    char u[2][10] = {"false", "true"};
    int c;

    while(scanf("%s %s", b, a) != EOF)
    {
        c = isMatch(a, b);

        printf("%s\n", u[c]);
    }

    return 0;
}

3.编译源码

$ gcc -o example examle.c -std=c89

4.运行及其结果

$ ./example
te?t*.*
txt12.xls
false
上一篇 下一篇

猜你喜欢

热点阅读