| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 358 人关注过本帖
标题:删除连续出现的相同字符,没有错误,结果却不对。。请问为什么啊?
只看楼主 加入收藏
境善
Rank: 2
等 级:论坛游民
帖 子:76
专家分:16
注 册:2012-10-29
结帖率:86.21%
收藏
已结贴  问题点数:1 回复次数:2 
删除连续出现的相同字符,没有错误,结果却不对。。请问为什么啊?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int reduce (char s[])
{
    int len=strlen(s);
    char *scopy;
     scopy=(char *)malloc((len+1)*sizeof(char));

while(*(s+1)!='\0')
        {
        if(*s!=*(s+1))
            *scopy++=*s;
             s++;
            }

strcpy(s,scopy);
return len-strlen(scopy);
}

void main()
{
    char ss[]={"Press***12225"};
    int r;
    r=reduce(ss);
printf("%d\n",r);
}
搜索更多相关主题的帖子: include return reduce 
2013-12-01 12:41
左手拉一只猫
Rank: 4
来 自:杭州
等 级:业余侠客
帖 子:70
专家分:250
注 册:2013-10-27
收藏
得分:1 
帮你看了下程序,这程序真心被你写的不怎么样。
顺便帮你指出问题:
(1)我运行的时候最后SS(你在主函数中用的)变量corrupt了,目测是在reduce函数中你最后把scopy复制给s的过程中出问题了,C语言里面字符串是以'\0'标识符结尾的,你的scopy目测没有。
(2)
while(*(s+1)!='\0')
最后一个字符你没有检查了。
(3)最大的BUG就是你在你的函数里面一直对S和scopy指针进行操作,最后这两个指针早就已经不是当年的模样了(乖乖指向字符串的头部),所以你后面的用strlen去测长度自然也会错。还有strlen函数是基于字符串中的‘\0’检测字符串是否结束,最好在scopy的最后加上避免出现无法预测结果。
这程序里面很多步骤都重复了,为了不混乱你的思路,还是照着你原来的思路改的,如下:
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int reduce (char s[])
{
    int len=strlen(s);
    char *scopy;
    scopy=(char *)malloc((len+1)*sizeof(char));
    char *s1=s,*scopy1=scopy;    //用来暂存字符数组s和scopy的头部,因为你后面还要用,o(╯□╰)o

    while(*(s+1)!='\0')
     {
        if(*s != *(s+1)) 
        {*scopy++=*s;}
            s++;
      }
    //上面没有检查最后一个字符是否重复。。。
    if(*(s) != *(s-1))
    {*scopy++=*s;}
    *scopy='\0';
strcpy(s1,scopy1);
return len-strlen(scopy1);
}

void main()
{
    char ss[]={"Press***12225"};
    int r;
    r=reduce(ss);
    printf("%d\n",r);
}

P.S:其实你在函数中对数组进行查重复的过程中就可以对其中数字进行统计,最后用你的Len减一下不就好了,最后就不用再次用strlen()。其实也可以用数组形式去调用s[i]和scopy[i]的,好处是最后scopy和s还是指向字符数组的头部。不然还要用变量保存他们的指针。其实我想说用C++风格写的话可以更简洁的,不过学习总是渐进的。
坐等拿分,我吃饭去了,敲字有点小麻烦额。。。。。

我能帮你的只能到这里了。。。
2013-12-01 17:08
境善
Rank: 2
等 级:论坛游民
帖 子:76
专家分:16
注 册:2012-10-29
收藏
得分:0 
回复 2楼 左手拉一只猫
嗯,完全明白了,非常感谢!讲解很详细
2013-12-01 22:04
快速回复:删除连续出现的相同字符,没有错误,结果却不对。。请问为什么啊?
数据加载中...
 
   



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

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