Problem 1032 - 找模式串

/*

Time Limit: 1000MS   Memory Limit: 65536KB   Difficulty:

Total Submit: 458  Accepted: 225  Special Judge: No Description  在字符串中查找指定的模式串是一种常见的运算,称为模式匹配。请你编写实现模式匹配的程序。

Input输入数据的第一行是一个正整数T(0<T≤100),表示有T组测试数据。

每组测试数据有两行:第一行为字符串S(长度不超过128,全部为大写英文字母),第二行为模式串P(长度不超过20)。Output对于每组测试数据,在一行上输出一个整数,表

示模式串P在字符串S中的位置序号(若出现多次,则输出第一次出现时的位置)。若在字符串S中找不到模式串P,则输出整数-1。

Sample Input3

ABCDEF
AB
EJBBMSWJPREAEYBM
MBWEJ
DCZRZYFGJVTPWKF
ZYFG

Sample Output
0
-1
4

*/

这个就是简单的模式匹配,数据又弱,按照严蔚敏数据结构上的朴素的方法就行,至于KMP……打不出来。。。

#include<stdio.h>
#include<string.h>
char s[140],t[30];
int main()
{
    int T,i,j,len1,len2;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s%s",s,t);
        len1=strlen(s);
        len2=strlen(t);
        i=0;j=0;
        while(i<len1&&j<len2)
        {
            if(s[i]==t[j]) {i++;j++;}
            else {i=i-j+1;j=0;}    //数组下标从0开始,这里应为i=i-j+1
        }
        if(j>=len2) printf("%d\n",i-len2);    //比较好玩,第一位序号是0!~
        else  printf("-1\n");    //找不到输出-1
    }
}

posted @ 2013-08-07 23:07  hjf007  阅读(213)  评论(0编辑  收藏  举报