免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1534 | 回复: 0
打印 上一主题 下一主题

[C] 咨询一个c和指针的课后题的解答.谢谢. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-16 17:37 |只看该作者 |倒序浏览
在c和指针的第四章有一道练习题如下:
从一个字符串中去除多余的空格,如有有两个以上的多余空格,那么保留一个空格.
如果在不开辟额外空间的情况下,给出了如下答案:但是我感觉是有问题的.我上机试了下,似乎也有问题.不知道是我太菜还是怎么样?
同志们有没有什么好的办法?谢谢.
/*
** Shrink runs of white space in the given string to a single space.
*/
#define NUL     ’\0’
void
deblank( char *string )
{
        char    *dest;
        char    *src;
        int     ch;
        /*
        ** Set source and destination pointers to beginning of the string, then
        ** move to 2nd character in string.
        */
        src = string;
        dest = string++;
        /*
        ** Examine each character from the source string.
        */
        while( (ch = *src++) != NUL ){
                if( is_white( ch ) ){
                         /*
                         ** We found white space. If we’re at the beginning of
                         ** the string OR the previous char in the dest is not
                         ** white space, store a blank.
                         */
                      if( src == string || !is_white( dest[–1] ) )
                                 *dest++ = ’ ’;

                }
                else {
                         /*
                         ** Not white space: just store it.
                         */
                      *dest++ = ch;
                }
        }
        *dest = NUL;
}

int
is_white( int ch )
{
        return ch == ’ ’ || ch == ’\t’ || ch == ’\v’ || ch == ’\f’ || ch == ’\n’
            || ch == ’\r’;
}

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP