zoukankan      html  css  js  c++  java
  • 深信服入职前编码训练21题--03

    题目描述:

    函数match检查字符串str是否匹配模板pattern,匹配则返回0,否则返回-1。

    模板支持普通字符(a-z0-9A-Z)及通配符?和*。

    普通字符匹配该字符本身,?匹配任意一个字符,*匹配任意多个任意字符。

    比如字符串abc对下述模板的匹配结果为:

    模板结果模板结果
    abc 0 a*b -1
    a* 0 ab? 0
    a*c 0 a? -1

    输入描述:

    第一行为输入串 第二行为模板串

    输出描述:

    匹配输出match,不匹配输出unmatch
    示例1
    输入
    
    abc
    a*c
    
    输出
    
    match

    分析:采用递归算法,i,j分别指向输入串和模板串的头部。

    如果都是字母且匹配,则同时向后走一位。

    如果模板串为问号,则同时向后走一位。

    如果模板串是星号,则模板串向后走一位,输入串不断向后走,每走一位检查是否匹配,直到匹配或到字符串末尾。

    解答:

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <malloc.h>
     4 
     5 int _match(const char *str, const char *pat, int i, int j){
     6     int strl = strlen(str);
     7     int patl = strlen(pat);
     8     if(i==strl && j==patl)
     9         return 0;
    10     else if(i==strl || j==patl)
    11         return -1;
    12     if(str[i]==pat[j])
    13         return _match(str, pat, i+1, j+1);
    14     else if(pat[j]=='?')
    15         return _match(str, pat, i+1, j+1);
    16     else if(pat[j]=='*')
    17         for(int k=i; k<strl; ++k)
    18             if(_match(str, pat, k, j+1)==0)
    19                 return 0;
    20     return -1;
    21 }
    22 
    23 int match(const char *str, const char *pattern)
    24 {
    25     //TODO:
    26     return _match(str, pattern, 0,0);
    27 }
    28 
    29 int input(char **src, char **ptn)
    30 {
    31     char buf[10240];
    32     
    33     *src = NULL;
    34     *ptn = NULL;
    35     if (fgets(buf, sizeof(buf), stdin) == 0)
    36         goto failed_;
    37     *src = strdup(buf);
    38     if (fgets(buf, sizeof(buf), stdin) == 0)
    39         goto failed_;
    40     *ptn = strdup(buf);
    41     return 0;
    42 failed_:
    43     if (*src)
    44         free(*src);
    45     if (*ptn)
    46         free(*ptn);
    47     *src = NULL;
    48     *ptn = NULL;
    49     return -1;
    50 }
    51 
    52 int main(int argc, char *argv[])
    53 {
    54     char *src = NULL;
    55     char *ptn = NULL;
    56     
    57     if (input(&src, &ptn) < 0) {
    58         fprintf(stderr, "error
    ");
    59         return 0;
    60     }
    61 
    62     if (match(src, ptn) == 0) {
    63         printf("match
    ");
    64     } else {
    65         printf("unmatch
    ");
    66     }
    67     return 0;
    68 }
  • 相关阅读:
    学会Git玩转Github笔记(一)——Github基本概念 & 仓库管理
    Github 入门基本操作
    Struts2拦截器浅析
    SSH(Struts2+Spring4+Hibernate4)框架教程之配置篇
    Spring 体系结构
    Ubuntu启动sshd服务
    jquery ajax/post 请求 案例
    Elasticsearch 配置
    Jenkins安装与配置
    解决Ubuntu环境变量错误导致无法正常登录  (command 'xxx' is available in bin ls)
  • 原文地址:https://www.cnblogs.com/tenjl-exv/p/12897186.html
Copyright © 2011-2022 走看看