| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1137 人关注过本帖
标题:我想问一下,这个程序应该怎么改才可以得到正确的答案?弄不明白,请各位高 ...
只看楼主 加入收藏
棉雨
Rank: 5Rank: 5
等 级:职业侠客
帖 子:174
专家分:368
注 册:2011-4-22
收藏
得分:0 
回复 20楼 辰星睿
else
  {      
     i++;
   }
我不理解这一句,如果主串跟子串的对应位置上的字符不相等,为什么只是i的值变。可不可以跟我说说为什么这么做,先谢谢了。
2011-05-03 13:01
辰星睿
Rank: 2
等 级:论坛游民
威 望:3
帖 子:33
专家分:63
注 册:2010-12-24
收藏
得分:0 
回复 21楼 棉雨
你看啊 加入母串是asdfghjkl  子串是ghjk  i控制母串 j控制子串 现在开始比较 首先比较第一个 a和g不相等 i应该+1,j不变 因为你子串还是该从第一个字母开始比较 除非子串和母串对应上了 就该i j都++ 否则你母串都要和子串的第一个开始比较  其实还可以这样 else{i++;j=0;}因为for()里面开始就j=0了 所以就不必再计较了  你看看是不是这么回事??
2011-05-03 17:48
辰星睿
Rank: 2
等 级:论坛游民
威 望:3
帖 子:33
专家分:63
注 册:2010-12-24
收藏
得分:0 
回复 21楼 棉雨
你看啊 加入母串是asdfghjkl  子串是ghjk  i控制母串 j控制子串 现在开始比较 首先比较第一个 a和g不相等 i应该+1,j不变 因为你子串还是该从第一个字母开始比较 除非子串和母串对应上了 就该i j都++ 否则你母串都要和子串的第一个开始比较  其实还可以这样 else{i++;j=0;}因为for()里面开始就j=0了 所以就不必再计较了  你看看是不是这么回事??
2011-05-03 17:48
棉雨
Rank: 5Rank: 5
等 级:职业侠客
帖 子:174
专家分:368
注 册:2011-4-22
收藏
得分:0 
回复 23楼 辰星睿
受教了,这个有点像KMP算法。谢谢你~
不好意思哦,这个帖我已经结了,不能给你专家分,下次一定给你。
2011-05-03 18:02
辰星睿
Rank: 2
等 级:论坛游民
威 望:3
帖 子:33
专家分:63
注 册:2010-12-24
收藏
得分:0 
回复 24楼 棉雨
不客气 要的是技术 不是分数
2011-05-03 23:08
棉雨
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
辰星睿
Rank: 2
等 级:论坛游民
威 望:3
帖 子:33
专家分:63
注 册:2010-12-24
收藏
得分:0 
回复 26楼 棉雨
我是这么想你的代码的 可以这么说 你这里只有一个母串 你的子串是通过提取子串的那个函数提出来的 所以不存在在母串中找不到子串的情况 这也是我觉得你那个程序冗余的地方 提取子串了 还有个用户输入子串 基于这种情况 所以我改动的那个代码 这种情况就没考虑 如果非要考虑的话 就在循环那里再加上一些条件代码 就可以了 应该不难  你自己想想吧
2011-05-04 08:08
快速回复:我想问一下,这个程序应该怎么改才可以得到正确的答案?弄不明白,请各 ...
数据加载中...
 
   



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

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