| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 661 人关注过本帖
标题:用函数递归求字符串周期,不怕一万就怕万一!
只看楼主 加入收藏
hecate3835
Rank: 1
等 级:新手上路
帖 子:15
专家分:4
注 册:2012-4-1
结帖率:100%
收藏
已结贴  问题点数:30 回复次数:5 
用函数递归求字符串周期,不怕一万就怕万一!
下面的程序我自己想着写的,编译运行以后发现一个问题。一些字符串结果显示不对,如:abcabc(ABCABC)或123123或hihlhohihlho出现错误的结果 0 ,应该还有别的。 麻烦大家看看问题在哪里,谢谢!
#include <stdio.h>
void stringperiod(char *c,int stt,int len,int *s)
{
        int i,sum=0,nsum=0;
        if(c[stt]=='\0')  return;
        for(i=0;i<len;i++)
        {
                sum=sum+c[i]*(i+1);
                nsum=nsum+c[stt+i]*(i+1);
        }
        if(sum==nsum)
        {
                (*s)++;
                stt+=len;
                stringperiod(c,stt,len,s);
        }
        else
        {
                stt++;
                len=len+len*(*s)+1;
                (*s)=0;
                stringperiod(c,stt,len,s);
        }
}
int strperiod(char *c)
{
        int s=0;
        int *p;
        p=&s;
        stringperiod(c,1,1,p);
        return s;
}
int main()
{
    char c[100];
    scanf("%s",c);
    printf("%d\n",strperiod(c));
        return 0;
}

[ 本帖最后由 hecate3835 于 2012-5-28 21:22 编辑 ]
2012-05-27 21:42
hecate3835
Rank: 1
等 级:新手上路
帖 子:15
专家分:4
注 册:2012-4-1
收藏
得分:0 
乖乖怎么没人帮我???
2012-05-27 23:49
wyk565542030
Rank: 2
等 级:论坛游民
帖 子:8
专家分:55
注 册:2012-3-30
收藏
得分:30 
你的s有操作吗?肯定都是零了
2012-05-28 11:32
hecate3835
Rank: 1
等 级:新手上路
帖 子:15
专家分:4
注 册:2012-4-1
收藏
得分:0 
回复 3楼 wyk565542030
有啊,这个程序只是某些字符串不能出正确结果,不是所有的都是错的。
2012-05-28 12:34
hecate3835
Rank: 1
等 级:新手上路
帖 子:15
专家分:4
注 册:2012-4-1
收藏
得分:0 
就这么沉了!?
2012-05-28 21:24
hecate3835
Rank: 1
等 级:新手上路
帖 子:15
专家分:4
注 册:2012-4-1
收藏
得分:0 
既然没人帮我,那我自己来找答案。通过用gdb调试,我发现
for(i=0;i<len;i++)
{
  sum=sum+c[i]*(i+1);
  nsum=nsum+c[stt+i]*(i+1);
}
这个并不能把 abba 这种字符串给识别出来。打个比方,你先吃两个苹果后吃一个苹果,和先吃一个苹果和后吃两个苹果一样,你都吃了三个苹果。
所以我给出以下改变过的程序,暂时还没发现错误。
#include <stdio.h>
void stringperiod(char *c,int stt,int len,int *s)
{
        int i=o,ch=0;
        if(c[stt]=='\0')  return;
        while(!ch&&i<len)
        {
                ch=c[i]-c[stt+i];
                i++;
        }
        if(!ch)
        {
                (*s)++;
                stt+=len;
                stringperiod(c,stt,len,s);
        }
        else
        {
                stt++;
                len=len+len*(*s)+1;
                (*s)=0;
                stringperiod(c,stt,len,s);
        }
}
int strperiod(char *c)
{
        int s=0;
        int *p;
        p=&s;
        stringperiod(c,1,1,p);
        return s;
}
int main()
{
    char c[100];
    scanf("%s",c);
    printf("%d\n",strperiod(c));
        return 0;
}
2012-05-30 08:56
快速回复:用函数递归求字符串周期,不怕一万就怕万一!
数据加载中...
 
   



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

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