求子串位置这个比较简单 有一个重要的点就是确定循环次数的问题 长串的长度是L1,子串的长度是L2,那么从头开始匹配的话就要L1-L2+1次 从位置n开始匹配的话,就要匹配L1+L2+1-n次
下面附上代码
#include<stdio.h>
#include<string.h>
int length(char s[])
{
int i = 0;
for(i=0;s[i]!='\0';i++){
};
return(i);
}
int find(int n,char s1[],char s2[])
{
int i=n,j,k=0;
int L1 = length(s1);
//printf("------%d-----\n",L1);
int L2 = length(s2);
//printf("-------%d------\n",L2);
while(i<L1-L2+1)
{
if(s1[i] == s2[k])
{
for(j=i+1;j<i+L2-1;j++)
if(s1[j] != s2[++k])
{
k=0;break;
}
else return i-n;
}
i++;
}
}
int main()
{
int pos;
int n;
char str1[50]="abcdefghij";
char str2[10]="def";
printf("请输入从第几个位置开始匹配???:\n");
scanf("%d",&n);
pos = find(n,str1,str2);
printf("----%d------",pos);
return 0;
}