Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2341161
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:08:08

void xx(char *str,char *substr)
{
  int tag;
  int i=0;
  int j=0;
  while(*(str+i)!=NULL)
  {
    tag=1;
     while(tag && *(substr+j)!=NULL)
     {
if(*(str+j) == *(substr+j))
    {
      tag=1;
      j++;
     }else
    {
     tag=0;
     j=0; //这里是造成死循环的地方,如果把它改为j++,结果肯定是不对的但至少不会成死循环
     }
      }
       if(tag)
       cnt++;
       i++;
    }
}

说明:中间的那个循环体和是一个死循环,例如说在对比第1个元素时就不成功则j=0,j=0说明又将对比第1个,这样又对比第1个,就成了死循环。
我对该命题的思路:
假如说i是str的元素变量应使i++向前,这样不会成死循环,字符串是有限的,i这样下去一定会到达字符末端,到时*(str+i)!=NULL这个就能使循环结束。
对于i也可以说在扫描str字符串,找与substr第1个字符相同的字符,当找到时进入第2层循环,依依进行后面的字符对比,当把substr字符串对比完且都成功时,cnt加1表示已找到一处,当从第2个循环出来时,而i续向前,而j初始化为0准备下次的对比。
你上面的tag变量的作用我不是很清楚,我想是不是类似于开关的作用呀?我的代码中不有用这个变量,把它省略了。我可能说得不是很清楚,下面代码是小弟的思路。有什么不对的地方请多多指教,都是莱鸟,一起学习吧!

//---------------------------------------------------------------------------

#pragma hdrstop

#include

int cnt=0; //定义的一个全局变量,记录substr在str中出现的次数
void xx(char *str,char *substr){
  int i=0; //i为str字符串的元素变量
  int j=0; //j为substr字符串的元素变量
  while(*(str+i)!=NULL){ //判断str若没有则退出
                while(*(str+i)==*(substr+j)){ //这是进行对比,第1个成功则对比第2个,第2个成功对比第3个依次下去
                        i++;
                        j++;
                        if (*(substr+j)==NULL) cnt++; // "*(substr+j)==NULL" 判断对比完没有,对比完了则说明找到一处则cnt加1,cnt是前面定义的全局变量
                }
                i++; //若上面对比到不成功时跳出,i继续向前
                j=0; //而j则初始为0,准备下一次的对比
        }
}

//---------------------------------------------------------------------------

#pragma argsused
void main(void){
        xx("adfd1234 afqf a f1234afwf1234a","1234");
        printf("%d\n",cnt);
        getchar();
}
//---------------------------------------------------------------------------


--------------------next---------------------

阅读(1104) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~