| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1137 人关注过本帖
标题:我想问一下,这个程序应该怎么改才可以得到正确的答案?弄不明白,请各位高 ...
取消只看楼主 加入收藏
棉雨
Rank: 5Rank: 5
等 级:职业侠客
帖 子:174
专家分:368
注 册:2011-4-22
收藏
得分:0 
回复 20楼 辰星睿
else
  {      
     i++;
   }
我不理解这一句,如果主串跟子串的对应位置上的字符不相等,为什么只是i的值变。可不可以跟我说说为什么这么做,先谢谢了。
2011-05-03 13:01
棉雨
Rank: 5Rank: 5
等 级:职业侠客
帖 子:174
专家分:368
注 册:2011-4-22
收藏
得分:0 
回复 23楼 辰星睿
受教了,这个有点像KMP算法。谢谢你~
不好意思哦,这个帖我已经结了,不能给你专家分,下次一定给你。
2011-05-03 18:02
棉雨
Rank: 5Rank: 5
等 级:职业侠客
帖 子:174
专家分:368
注 册:2011-4-22
收藏
得分:0 
回复 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);返回子串在主串中第一次出现时的首字母对应主串的位置(这样返回来的值总是正确的)。综合起来看,好像跟模式串的关系不大。因为我编这个程序的目的是求出模式串在主串中第一次出现时,模式串首字符在主串中的位置,而这个程序并没有体现出来。

是我自己在写程序的时候没有弄清楚逻辑,导致你在改的时候虽然算法正确了,但还没有达到目的。还是谢谢你。
2011-05-03 23:10
快速回复:我想问一下,这个程序应该怎么改才可以得到正确的答案?弄不明白,请各 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021145 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved