| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 622 人关注过本帖
标题:考考您的实际动手编程的能力(c语言)
取消只看楼主 加入收藏
wsj3000
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:78
专家分:161
注 册:2009-8-4
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:3 
考考您的实际动手编程的能力(c语言)
编一个函数,输入一个字符串,要求做一个新字符串,把其中所有的一个或多个连续的空白字符都压缩为一个空格。这里所说的空白包括空格、'\t'、'\n'、'\r'。例如原来的字符串是:

"This Content hoho       is ok\
        ok?\
        file system\
uttered words   ok ok      ? end.   "
压缩了空白之后就是:

This Content hoho is ok ok? file system uttered words ok ok ? end.实现该功能的函数接口要求符合下述规范:

char *shrink_space(char *dest, const char *src, size_t n);各项参数和返回值的含义和strncpy类似。
注意:压缩后,开头和结尾不能有空格

原问题出处:http://learn.
看看你几次能够完全正确的实现,我用了3次,第一次看错题,第二次忘了处理末尾的空格,第三次才完成的;希望您比我做的更好!~~~
搜索更多相关主题的帖子: c语言 考考 能力 
2010-03-27 23:57
wsj3000
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:78
专家分:161
注 册:2009-8-4
收藏
得分:0 
恩,楼上的,好像你忘记了 size_t n这个参数,他是说拷贝n个字符到dest,而且要求最后一个字符(第n个)是'\0'结尾;而且要求dest中第一个'\0'之后到最后一个字符都只能是'\0'----具体参考strcpy()的定义;
2010-03-28 15:12
wsj3000
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:78
专家分:161
注 册:2009-8-4
收藏
得分:0 
恩,正确了,虽然有一个参数没有用到,len=0;给您分~~~
2010-03-29 12:11
wsj3000
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:78
专家分:161
注 册:2009-8-4
收藏
得分:0 
我的代码,第三次写的~~~
#ifndef IS_SPACE_F
#define IS_SPACE_F
#define is_space(p) (*p == ' ' || *p == '\n' || *p == '\t' || *p == '\r')
#endif //注意这个宏定义函数不能使用is_space(src++)的形式,因为src++自增加产生的副作用会影响下个判断

char *shrink_space(char *dest, const char *src, size_t n)
{
    char * dest_tmp = dest;

    for(; is_space(src); src++); //忽略src开头的"空格"
    if(n != 0){
        *dest++ = *src++;
        for(n--; n>=1 && *(dest-1)!='\0'; n--){
            if(*(dest-1)==' '){
                for(; is_space(src); src++); //如果上个字符是空格,当前的一定不能是空格
                *dest++ = *src++;
            }else{ //如果上个字符不是空格,当前字符可以是非空格,包括'\0'
                *dest = is_space(src) ? ' ' : *src;
                dest++, src++;
            }
        }

        if(*(dest-1)=='\0' && *(dest-2)==' '){ //当n > strlen(src);
            *(dest-2) = '\0';
        }
        for(; n>=1; n--){
            *dest++ = '\0';
        }
    }
    return dest_tmp;
}
2010-03-29 12:31
快速回复:考考您的实际动手编程的能力(c语言)
数据加载中...
 
   



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

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