码迷,mamicode.com
首页 > 其他好文 > 详细

子串匹配

时间:2017-08-18 17:18:38      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:turn   strstr   stdio.h   bre   结果   定义   color   put   break   

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

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

int Strstr(char * s1, char * s2)  //自定义一个子串匹配的函数
{
    int flag;
    char * p, * q;

    for(; * s1 != \0; s1++)
    {
        if (* s2 == * s1)            // 判断字符串中是否有和要判断的字串首字符相同的字符
        {
            flag = 1;
            p = s1;                    // s1 p为第一个相同字符的地址
            q = s2;
            for(; * q != \0;)        // 如果有则判断接下去的几个字符是否相同
            {
                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 的子串\n",strlen(a) < strlen(b) ? a : b, strlen(a) > strlen(b) ? a : b);
    else
        puts("匹配失败!");
    return 0;
}

 

子串匹配

标签:turn   strstr   stdio.h   bre   结果   定义   color   put   break   

原文地址:http://www.cnblogs.com/darkchii/p/7390427.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!