回复 23楼 辰星睿
今晚去上选修课的时候,想了一下你写的这个程序。感觉有点不对劲,回来我加了一行:
for(i=0,j=0;i<s->lenght&&j<t->lenght;)
{
cout<<"i="<<i<<" "<<"j="<<j<<endl;
if(s->ch[i]==t->ch[j])
假设我构造的主串是asdhgsjkdghjsdgh,然后再构造模式串dfgd。就是说,我构造的模式串不跟主串中的任何一个跟模式串长度相同的子串相等,在运行的时候,i的值一次次的增加,但j的值并不是一直为0。
再看看这一行:k=strcmp(&s,substr(&s,i,Strlen(&t),&r));它的意思是,从主串中取跟模式串的长度相同的子串,然后跟主串相比较,strcmp函数中return (i-t->lenght+1);返回子串在主串中第一次出现时的首字母对应主串的位置(这样返回来的值总是正确的)。综合起来看,好像跟模式串的关系不大。因为我编这个程序的目的是求出模式串在主串中第一次出现时,模式串首字符在主串中的位置,而这个程序并没有体现出来。
是我自己在写程序的时候没有弄清楚逻辑,导致你在改的时候虽然算法正确了,但还没有达到目的。还是谢谢你。