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;
    }
    
  • 相关阅读:
    JVM 内存布局
    线程池总结
    Redis持久化
    Java编程基础
    toString()、String.valueOf、(String)强转
    4 种主流的 API 架构风格对比
    kubernetes 节点设置不可调度
    Linux下如何查看哪些进程占用的CPU内存资源最多
    Linux openssl1.0.2k升级openssl1.1.1e版本教程
    对一些权限题密码的说明
  • 原文地址:https://www.cnblogs.com/darkchii/p/7390427.html
Copyright © 2011-2022 走看看