美文网首页
c语言实现字符串通配

c语言实现字符串通配

作者: 一路向后 | 来源:发表于2021-05-06 21:16 被阅读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

相关文章

  • c语言实现字符串通配

    1.题目描述 问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实...

  • redis 字符串与字典实现

    简单动态字符串 (SDS) 内部实现 c 字符串通常是以空字符 '\0' 结尾,所以一个 SDS 的长度为: le...

  • redis源码2--字符串SDS

    Redis是用C语言实现的,但是并没有使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串...

  • 【Redis面试题】Redis的字符串是怎么实现的?

    Redis字符串的实现 Redis虽然是用C语言写的,但却没有直接用C语言的字符串,而是自己实现了一套字符串。目的...

  • 39_字符串类的创建(上)

    关键词: 0. 历史遗留问题 C语言不支持真正意义上的字符串 C语言用字符数组和一组函数实现字符串操作 C语言不支...

  • C++11新特性(20)-用string对象处理文件名

    C风格字符串 从C语言开始,就已经实现了对字符串的支持。为了处理C风格字符串,C语言标准库提供了一组函数,它们被定...

  • 从根儿上理解 Redis(一)

    简单动态字符串 Redis 底层使用 C 语言实现的,但是 Redis 没有直接使用 C 语言传统的字符串表示,而...

  • C++中数组操作符的重载

    字符串类的兼容性 存在的一些历史遗留问题C语言不支持真正意义上的字符串C语言用字符数组和一组函数实现字符串操作C语...

  • C 和 Java 中字符串和字符数组的对比

    1. C 和 Java 中字符串和字符数组的对比 实现原理 在 C 语言中,字符串和字符数组本质上都是一块连续的内...

  • 字符串匹配(支持通配符* ? )

    设*可以匹配0~n个任意字符,?可以匹配一个任意字符,实现字符串含通配符的匹配算法,查找算法 参考阅读 c语言实现...

网友评论

      本文标题:c语言实现字符串通配

      本文链接:https://www.haomeiwen.com/subject/urqjdltx.html