c语言一维数组的查找,输出位置

题:
数组a[asdfghjkl]中有这几个字符,有另一数组b[jk], 要求输出b在a中的位置,
输出格式:printf("此子串(b)在该字符串(a)的起始位置为:\n%d,%d\n");
请注释各个步骤

这是模式匹配问题,下面我写了一段简单模式匹配~~~还有其他的高效的匹配算法:如KMP匹配、二分匹配等,你可以研究一下~~~~

/*一般模式匹配 */
#include<stdio.h>
#include<string.h>
#define nMAX 1000

char a[nMAX] = {'a','s','d','f','g','h','j','k','l','\0'};
char b[nMAX] = {'j','k','r','\0'};

/*p1:主串 p2:模式串 */
int Find(char p1[],char p2[])
{
int i,len1,len2;
char *pp = p2; //模式串指针pp指向第一个字符
char *t = p1; //主串指针t指向下标i的字符
len1 = strlen(pp); //模式串长度
len2 = strlen(t); // 主串长度
i = 0; //记录主串位置
while(*pp != '\0' && i <= len2 - len1) //pp未到串尾同时剩余字符数超过模式串长,则循环
{
if(*pp++ != *t++)
{
pp = p2; //模式串回到第1个字符
t = p1+(++i); //主串回到第i+1位置
}
}
if(*pp == '\0') return i; //若pp已到串尾,则匹配成功
return -1; //否则失败
}
int main()
{
int d;
// scanf("%s",a);
// scanf("%s",b);
d = Find(a,b);
if(d == -1) printf("b不在a中\n");
else printf("此子串(b)在该字符串(a)的起始位置为:%d\n",d);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
相似回答