zoukankan      html  css  js  c++  java
  • 子串匹配

      这个还是有点小麻烦的,我自己写的实现效果不太好,代码也很糟,然后查资料看到了比较好的算法,放在这里记录一个。

      C库中有strstr()函数。其原型为:

    extern char *strstr(char *str1, const char *str2);
    

      如果匹配正确,则返回匹配正确的子串的首地址,如果匹配失败返回NULL。

    #include <stdio.h>
    #include <string.h>
    
    int strstr(char * s1, char * s2)  //自定义一个子串匹配的函数
    {
        int flag;
        char * p, * q;
    
        for(; * s1 != ''; s1++)
        {
            if (* s2 == * s1)            // 判断字符串中是否有和要判断的字串首字符相同的字符
            {
                flag = 1;
                p = s1;                    // s1 p为第一个相同字符的地址
                q = s2;
                for(; * q != '';)        // 如果有则判断接下去的几个字符是否相同
                {
                    if (* q++ != * p++)
                    {
                        flag = 0;
                        break;
                    }
                }
            }
            if (flag == 1)
                break;
        }
        return (flag);
    }
    
    int main()
    {
        char a[20], b[20], * p = a, * q = b;
        int flag = 1;
    
        puts("请输入两组字符串进行比较:");
        gets(a);
        gets(b);
        
        puts("匹配结果:");
    
        if(flag == strstr(strlen(a) < strlen(b) ? q : p, strlen(a) > strlen(b) ? q : p))
            printf("%s 是 %s 的子串
    ",strlen(a) < strlen(b) ? a : b, strlen(a) > strlen(b) ? a : b);
        else
            puts("匹配失败!");
        return 0;
    }
    
  • 相关阅读:
    1386. 安排电影院座位
    1123. 最深叶节点的最近公共祖先
    375. 猜数字大小 II
    未能在system.drawing中找到bitmap
    856. 括号的分数
    140. 单词拆分 II
    5909. 并行课程 III
    typora + ImgHosting (一款不会存储图片的图床实现)
    IDEA插件:search with bing、search with baidu
    多吉搜索美化
  • 原文地址:https://www.cnblogs.com/darkchii/p/7390427.html
Copyright © 2011-2022 走看看