| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 646 人关注过本帖
标题:求救 在线等
只看楼主 加入收藏
sdj501
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2009-8-31
结帖率:50%
收藏
 问题点数:0 回复次数:9 
求救 在线等
#include<iostream.h>
#include<string.h>
void main(void)
{
    char buf[]="abcdefgabcgggggsdgabggabc";
    char a[]="abc";
    int flag=1,count=0,i,j;
    int m=strlen(buf),n=strlen(a);
    if(m<n)
        count=0;
    for(i=0;i<m;i++)
    {
        if(buf[i]==a[0])
        {
            for(j=0;j<n&&flag;j++)
        {
            if(buf[i+j]!=a[j])
                flag=0;
        }
        if(flag==1)
            count++;
        }
     }
    cout<<count<<endl;
}
结果为什么是2 呢?!!!
搜索更多相关主题的帖子: 在线 
2009-10-28 10:19
newCpp
Rank: 5Rank: 5
来 自:火星
等 级:职业侠客
威 望:3
帖 子:256
专家分:375
注 册:2009-8-17
收藏
得分:0 
你用断点执行一下你的程序应该就能够明白了吧!
我刚刚试了一下,你这个里面的第一次循环的时候
count的值会增加1
在i循环到7次的时候两个a相比较相同
然后执行了下面的If语句判断
因为for循环的时候j 都是问0开始的
所以i+j就相当于7+0和0比较这个时候
 buf[7]和a[0]的值都是a相等,
这个我自己的猜测我也不知道是不是正确的!!

编程语言视频教程在线播放学习
2009-10-28 11:32
flyingcloude
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:6
帖 子:598
专家分:1512
注 册:2008-1-13
收藏
得分:0 
#include<iostream.h>
#include<string.h>
void main(void)
{
    char buf[]="abcdefgabcgggggsdgabggabc";
    char a[]="abc";
    int flag=1,count=0,i,j;
    int m=strlen(buf),n=strlen(a);
    if(m<n)
        count=0;
    for(i=0;i<m;i++)
    {
        if(buf[i]==a[0])  
        {
            for(j=0;j<n&&flag;j++)
        {
            if(buf[i+j]!=a[j])    //abcdefgabcgggggsdgabggabc   当循环到这里时,flag被赋值为0了,此后flag一直都是0了,所以再也不会进入
                flag=0;            //    循环了。建议:应该在后面的某个恰当的位置把flag赋值1
        }
        if(flag==1)
            count++;
        }
     }
    cout<<count<<endl;
}

你能学会你想学会的任何东西,这不是你能不能学会的问题,而是你想不想学的问题
2009-10-28 11:39
newCpp
Rank: 5Rank: 5
来 自:火星
等 级:职业侠客
威 望:3
帖 子:256
专家分:375
注 册:2009-8-17
收藏
得分:0 
晕也对啊!但为什么我用断点的时候会发现这个只会成为1??

编程语言视频教程在线播放学习
2009-10-28 11:57
sdj501
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2009-8-31
收藏
得分:0 
回复 3楼 flyingcloude
对的哦,我咋就没有想到呢,看来还得多多学习学习啊!!!!!
2009-10-28 12:03
qlc00
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:157
专家分:540
注 册:2007-11-26
收藏
得分:0 
for(i=0;i<m;i++)  
    {  
       flag=1;//在这个地方将flag置为1就可以正常输出
        if(buf[i]==a[0])   
        {  

Anything is possible!
2009-10-28 13:15
我的爱很执着
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-10-28
收藏
得分:0 
这样就好了
#include<iostream.h>
#include<string.h>
void main(void)
{
    char buf[]="abcdefgabcgggggsdgabggabc";
    char a[]="abc";
    int flag=1,count=0,i,j;
    int m=strlen(buf),n=strlen(a);
    if(m<n)
        count=0;
    for(i=0;i<m;i++)
    {
        if(buf[i]==a[0])
        {
            for(j=0;j<n&&flag;j++)
        {
            if(buf[i+j]!=a[j])
                flag=0;
        }
       // if(flag==1)  不能有这一行
            count++;
        }
     }
    cout<<count<<endl;
}

我的爱很执着
2009-10-28 23:08
Ckay
Rank: 2
等 级:论坛游民
帖 子:13
专家分:12
注 册:2009-10-29
收藏
得分:0 
回复 7楼 我的爱很执着
那里是判断相邻的几个字符是否和第二个字符串相匹配,如果不匹配count就不自加的
2009-10-29 02:54
cookies5000
Rank: 2
等 级:论坛游民
帖 子:33
专家分:48
注 册:2009-10-25
收藏
得分:0 
char buf[]="abcdefgabcgggggsdgabggabc";
    char a[]="abc";

为什么等于2,很明显了吧:比较前2个abc,完全匹配,到第3个(也就是ab那儿),不能完全匹配,cut!把flag置0了,永远也翻不过来身了。。。。。后面再有N个abc,它也不管了,所以程序这玩意儿,你把开关关了,还要在适当时候再打开,否则循环10亿次也白搭。。。呵呵。支持6楼。。。

如果是这样:char buf[]="abcdefgabcggabcgggsdgabcggabc";
    char a[]="abc";
不要置flag=1了,count绝对等于5。哈哈。。。
2009-10-29 16:23
最左边那个
Rank: 4
等 级:业余侠客
威 望:3
帖 子:97
专家分:201
注 册:2009-4-24
收藏
得分:0 
9楼说的很对!
代码从abcdefgabcgggggsdgabggabc开头开始,每遇到一次abc相连的情况,count就加1;当遇到出现a却没有bc相连的时候,就再也不会对count进行操作,那么count就保持了原有状态!
2009-10-30 12:32
快速回复:求救 在线等
数据加载中...
 
   



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

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