| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 545 人关注过本帖
标题:解释一下
只看楼主 加入收藏
红手心
Rank: 2
等 级:论坛游民
帖 子:31
专家分:36
注 册:2010-4-7
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
解释一下
#include<stdio.h>
       void main()
       {
         int  i,j;
         int  num=0;
         int str1len,str2len;
         char str1[20];
         char str2[10];
         printf("please input astring:");
         gets(str1);
         printf("input a string:");
         gets(str2);
         str1len=strlen(str1);
         str2len=strlen(str2);
         for(i=0;i<str1len-str2len+1;i++)        这一步为什么是i<str1len-str2len+1
         {
         for(j=0;j<str2len && str1[i+j]==str2[j];j++);    这一步就更晕了
         if(j==str2len)
         num++;
         }
         printf("num=%d",num);
         }
搜索更多相关主题的帖子: 解释 
2010-04-30 15:46
红手心
Rank: 2
等 级:论坛游民
帖 子:31
专家分:36
注 册:2010-4-7
收藏
得分:0 
回复 楼主 红手心
麻烦详细一点   这是书上的例题   他没解释清楚

我是新手
2010-04-30 15:49
红手心
Rank: 2
等 级:论坛游民
帖 子:31
专家分:36
注 册:2010-4-7
收藏
得分:0 
怎么还没人啊

我是新手
2010-04-30 16:14
rib
Rank: 4
等 级:业余侠客
帖 子:95
专家分:252
注 册:2009-3-30
收藏
得分:20 
这是求str2数组在str1出现的次数
for(i=0;i<str1len-str2len+1;i++)  /*比如str2是2个字符as,str1是5个字符asdfg这就要比较4次所以是5-2+1次*/         
       {
         for(j=0;j<str2len && str1[i+j]==str2[j];j++);    /*这个for循环就是求str1中是否有str2*/
         if(j==str2len)        //如果j==str2len ,这就是循环完了,循环完了就表示str1中含有str2所以num就+1
         num++;
         }
不知能不能明白 ,词语有点乱
2010-04-30 16:15
红手心
Rank: 2
等 级:论坛游民
帖 子:31
专家分:36
注 册:2010-4-7
收藏
得分:0 
回复 4楼 rib
主要是这句了   不明白
 for(j=0;j<str2len && str1[i+j]==str2[j];j++);    //这里为什么是封号


还有str1[i+j]指的是字符数组中的第i+j元素吗

我是新手
2010-04-30 16:31
rib
Rank: 4
等 级:业余侠客
帖 子:95
专家分:252
注 册:2009-3-30
收藏
得分:0 
for(j=0;j<str2len && str1[i+j]==str2[j];j++); /*这个for循环对比条件全在括号里,所以不用{}直接用;表示for是一个语句了,关键str1[i+j]==str2[j];这个弄懂就没问题了,还是用我刚才的as打比方啊,现在进入第一个循环i = 0吧!j是0,str2[j]是a吧,str1[i+j]也是a,然后J++str2[j]是s吧,str1[i+j]也是s,str2就在str1中出现了*/

还有str1[i+j]指的是字符数组中的第i+j元素吗  //   是的

其实不明白的话可以编译下,然后自己代入几个字符进去再纸上琢磨下!

我自己都快抓狂了!表达能力太差了!
2010-04-30 16:43
红手心
Rank: 2
等 级:论坛游民
帖 子:31
专家分:36
注 册:2010-4-7
收藏
得分:0 
终于  看明白了   4楼  谢谢了

我是新手
2010-04-30 16:44
xiaoyaoo
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:15
专家分:20
注 册:2010-4-26
收藏
得分:0 
“这一步为什么是i<str1len-str2len+1”,看到小于号没,也就是i=str1len-str2len+1不可取,也就是最大它只能取str1len-str2len,如果你改为i<=str1len-str2len也是对的,这样应该就比较懂吧。。。。。


for(j=0;j<str2len && str1[i+j]==str2[j];j++);    这一步就更晕了
         if(j==str2len)
         num++;
         }
         printf("num=%d",num);
至于这些我解释一下:在j小于str2长度且str2的元素有和str1或str2的元素相等,
如果j=str2的长度num就加1,它的意思其实就是让你在str1和str2中输出与str2相同的字符串的个数。。。
我不知道我对不对,你可以参考一下。。。。。
2010-04-30 17:06
honey536
Rank: 2
来 自:山东
等 级:论坛游民
帖 子:68
专家分:76
注 册:2010-4-20
收藏
得分:0 
这个我也迷啊,解释不了
2010-05-01 11:08
程冬水
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-01 13:55
快速回复:解释一下
数据加载中...
 
   



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

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