免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: g9527j
打印 上一主题 下一主题

一個有難度的題目 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2006-04-07 14:13 |只看该作者
int isSubString(char *src,char *des)
{
        while('\0'!=*des)
        {
                if(*src!=*des)
                {
                        return -1;
                }
                src++;
                des++;
        }
        return 0;
}


这个判断有问题哦!!!如: 母串:abcabcde  子串:abcd  
我也给一个判断子串的:
int SubString(const char *src,const char *des)
{
         char  *temp = NULL;
         temp = des;
         if (src ==NULL ||  des ==NULL)
                  printf(" src or des is NULL.\n");
         while(src != '\0' && temp != '\0')
         {
                  if (*src == *temp)
                  {
                          src++;
                          temp++;
                  }else
                  {
                          src++;
                          temp = des;                  
                   }         
         }
          if (*src = '\0' && *temp !='\0')
          {
                    printf("not substring.\n");
                    return -1;
           }else
           {
                    printf("is substring.\n");
                    return 0;
            }      
}

论坛徽章:
0
22 [报告]
发表于 2006-04-07 14:19 |只看该作者
原帖由 hanbing5299 于 2006-4-7 14:13 发表


这个判断有问题哦!!!如: 母串:abcabcde  子串:abcd  
我也给一个判断子串的:
int SubString(const char *src,const char *des)
{
         char  *temp = NULL;
         temp = des;
          ...

答案是1,难道不对?
兄弟有没有看懂我的算法?

论坛徽章:
0
23 [报告]
发表于 2006-04-07 14:51 |只看该作者
  1. int
  2. substr_count(char *src, char *des)
  3. {
  4.         char *srcp, *desp;
  5.         int result;
  6.        
  7.         srcp = src;
  8.         while (*srcp)
  9.         {
  10.                 desp = des;
  11.                 if (*srcp == *desp)
  12.                         while (*desp && *++srcp == *++desp);
  13.                 else srcp++;
  14.                 if (*desp == 0) result++;
  15.         }
  16.         return result;
  17. }
复制代码

[ 本帖最后由 bitbull 于 2006-4-9 20:36 编辑 ]

论坛徽章:
0
24 [报告]
发表于 2006-04-07 15:15 |只看该作者
TO :soul_of_moon
你的算法的和我的算法是一样的啊,循环判断母串中子串的个数。不是么??
我理解你的isSubString函数功能是想判断dec是不是src的子串。我觉得你在判断是否为子串的过程中,也就是这个函数,处理的不全面。就是说当*str !=*dec时,这个时候不能够dec++.我觉得一旦不相等,那么子串就要从头开始重新和母串的剩余部分比较。
就是                 if (*src == *temp)
                  {
                          src++;
                          temp++;
                  }else
                  {
                          src++;
                         temp = des
;                  
                   }
你说呢??
如果理解有误,请指正哈

论坛徽章:
0
25 [报告]
发表于 2006-04-07 15:18 |只看该作者
回楼上:
先看懂这一段:
while('\0'!=*pcTmp)
     {
                if(0==isSubString(pcTmp,des))
                {
                        iCount++;
                }
                pcTmp++;
        }

论坛徽章:
0
26 [报告]
发表于 2006-04-07 15:21 |只看该作者
是判断dec是不是src的子串,但不是你想的那种判断。我只需判断头上几个是不是与dec相同即可,至于遍历就用上面的那个while来实现

论坛徽章:
0
27 [报告]
发表于 2006-04-07 15:36 |只看该作者
soul_of_moon你的速度好快哦!!我刚试了一下,你的是正确的,还没有来的及向你赔不是呢你就发了两段话了,呵呵。
主要就是我们在处理是不是子串的时候思路是不一样的,我思维有些定式了,没有看清楚就发言了,不好意思哦!!


你的这个思路比我的那个好!!学习了,记下了,呼呼!!

另:俺是妹子,不是兄弟咯!!

[ 本帖最后由 hanbing5299 于 2006-4-7 15:40 编辑 ]

论坛徽章:
0
28 [报告]
发表于 2006-04-07 15:38 |只看该作者
原帖由 soul_of_moon 于 2006-4-7 10:12 发表
算了,我还是贴出来吧,省得再讨论下去,另外批评一下LZ不劳而获的态度
#include <stdio.h>

int substring(const char *src,char *des);
int isSubString(char *src,char *des);

int main()
{
        c ...

是对的

论坛徽章:
0
29 [报告]
发表于 2006-04-07 15:56 |只看该作者
先纠正一下大家的观点,再自我批评一下。我的代码少了空串的检查,加上空串的检查的代码才是完整可靠的

论坛徽章:
0
30 [报告]
发表于 2006-04-07 16:03 |只看该作者
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP