题目:编写一个程序,判断一个字符串是否是另一个字符串的子串,若是,返回子串第一次在主串中出现的位置,否则返回-1;
#include<stdio.h>
int acm(char a[30],char b[30])
{
int i=1,j=0;
for(j=0;j<30;j++) 我知道此处不对,我不知道此处怎样编才能实现原题的功能。
if(b[0]==a[j])
return j+1;
for(j=0;j<30;j++)
if(b[i]==a[j])
i++;
for(j=0;j<30;j++)
if(b[i]!=a[j]||b[0]!=a[j])
return -1;
}
void main()
{
char iteam[30],itean[30];
int asd;
printf("input some words:\n");
scanf("%s",&iteam);
printf("input some words again:\n");
scanf("%s",&itean);
asd=acm(iteam,itean);
printf("%d",asd);
}
----------------解决方案--------------------------------------------------------
题目:编写一个程序,判断一个字符串是否是另一个字符串的子串,若是,返回子串第一次在主串中出现的位置,否则返回-1;
#include<stdio.h>
int acm(char a[],char b[])
{
int i=1,j=0;
for(j=0;j<strlen(a);j++) 我知道此处不对,我不知道此处怎样编才能实现原题的功能。
if(b[0]==a[j])
return j+1;
for(j=0;j<strlen(b);j++)
if(b[i]==a[j])
i++;
for(j=0;j<strlen(a);j++)
if(b[i]!=a[j]||b[0]!=a[j])
return -1;
}
void main()
{
char iteam[30],itean[30];
int asd;
printf("input some words:\n");
scanf("%s",&iteam);
printf("input some words again:\n");
scanf("%s",&itean);
asd=acm(iteam,itean);
printf("%d",asd);
}
但你的算法还是不对.
给你个参考函数.
/*朴素模式匹配*/
int indx(seqstring p,seqstring t)
{
int j,i=0,succ=0;
while((i<=t.size-p.size+1)&&(!succ))
{
j=0;
succ=1;
while((j<=p.size-1)&&succ)
if(p.a[j]==t.a[i+j])
{
j++;
}
else
{
succ=0;
}
++i;
}
if(succ) return i-1;
else return -1;
}
----------------解决方案--------------------------------------------------------
我用的是MSC.还是看不懂,有没有简单的易懂的算法,谢谢!
----------------解决方案--------------------------------------------------------
这个已经是最简单的模式匹配算法了.
看看朴素模式匹配的思想,再根据这个程序理解一下,当然这个程序我引入succ是为了提前结束提高效率.
----------------解决方案--------------------------------------------------------
如果我没记错,,KMP才是最有效的匹配算法,,不过我没弄懂就是
----------------解决方案--------------------------------------------------------
如果我没记错,,KMP才是最有效的匹配算法,,不过我没弄懂就是
说的不错.
----------------解决方案--------------------------------------------------------