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
}
}