| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 735 人关注过本帖
标题:一题多解 出一道最easy的题目(关于去除字符串中所有空格的,题目及样本在1 ...
取消只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:100 回复次数:7 
一题多解 出一道最easy的题目(关于去除字符串中所有空格的,题目及样本在1楼)
程序代码:
#include <stdio.h>

int main()
{
    //程序目标很简单 就是去除所有空格最终输出Thisisateststring.
    char test[]=" This  is   a    test    string      .      ";
    char sbuf[200]={'\0'};
    int i=0,j=0;
    while(test[i++]!='\0')  if(test[i]!=' ')  sbuf[j++]=test[i];
    printf("$-:%sEND\n",sbuf);
    return 0;
}

最后输出:$-:Thisisateststring.END

主要目的就是看看这个题目究竟有多少种解法
搜索更多相关主题的帖子: color 字符串 样本 
2014-03-05 17:22
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
程序代码:
#include <stdio.h>

int main()
{
    //程序目标很简单 就是去除所有空格最终输出Thisisateststring.
    char test[]=" This  is   a    test    string      .      ";
    char*p=test;
    printf("$-:");
    while(*++p!='\0') if(*p!=' ') printf("%c",*p);
    printf("END\n");
    return 0;
}
$-:Thisisateststring.END

DO IT YOURSELF !
2014-03-05 17:32
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
程序代码:
#include <stdio.h>

int main()
{
    //程序目标很简单 就是去除所有空格最终输出Thisisateststring.
    char test[]=" This  is   a    test    string      .      ";
    int index=0;
    char* p=test;
    while(*++p!='\0') if(*p!=' ') test[index++]=*p,*p='\0';
    printf("$-:%sEND\n",&test[0]);
    return 0;
}
$-:Thisisateststring.END

DO IT YOURSELF !
2014-03-05 18:02
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用yuccn在2014-3-5 19:22:29的发言:


 
char *remove_spase(char *p)
{
    // 不判断参数是否合法了
    char *pResult = (char *)malloc(strlen(p) * sizeof(char));
    char *pIndex = pResult;
 
    while (*p != '\0') {
        if (*p != ' ') {
            *pIndex = *p;
            pIndex++;
        }
        p++;  
    }
 
    pIndex = '\0';
    return pResult; // 外面对其内存进行释放
}
我给你补了一下代码  不知道是否是你正确的意图    反正你的结果是错误的  哈哈
程序代码:
#include <stdio.h>
#include <string.h>
#include <malloc.h>

char *remove_spase(char *p)
{
    // 不判断参数是否合法了
    char *pResult = (char *)malloc(strlen(p) * sizeof(char));
    char *pIndex = pResult;

    while (*p != '\0') {
        if (*p != ' ') {
            *pIndex = *p;
            pIndex++;
        }
        p++;
    }

    pIndex = '\0';
    return pResult; // 外面对其内存进行释放
} 

int  main()
{
     char test[]=" This  is   a    test    string      .      ";
     char *p=remove_spase(test);
     printf("$-:%sEND\n",p);
     free(p);
     return 0;
}
$-:Thisisateststring.屯屯屯屯屯屯屯屯屯屯屯屯屯???$銗END


DO IT YOURSELF !
2014-03-05 19:31
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
4楼代码加一句      memset(pResult,'\0',strlen(p));
可以成功  但是原因不明

貌似不加也没啥问题啊

DO IT YOURSELF !
2014-03-05 19:49
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用azzbcc在2014-3-5 20:09:43的发言:

while(*p)
{
  if (' ' != *p) putchar(*p);
  p++;
}
小黑的没问题
程序代码:
#include <stdio.h>

int  main()
{
    char test[]=" This  is   a    test    string      .      ";
    char *p=test;
    printf("$-:");
    while(*p)
    {
        if (' ' != *p) putchar(*p);
        p++;
    }
    puts("END");
    return 0;
}




DO IT YOURSELF !
2014-03-05 20:43
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用yuccn在2014-3-5 20:50:37的发言:


char *remove_spase(char *p)
{
    // 不判断参数是否合法了
    char *pResult = (char *)malloc(strlen(p) * sizeof(char));
    char *pIndex = pResult;

    while (*p != '\0') {
        if (*p != ' ') {
            *pIndex = *p;
            pIndex++;
        }
        p++;
    }

    *pIndex = '\0'; // 漏了*
    return pResult; // 外面对其内存进行释放
}


主函数能释放子函数申请的内存???
他们都是在堆上申请的吗???

DO IT YOURSELF !
2014-03-05 20:54
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用yuccn在2014-3-5 21:05:48的发言:

是的,这个没有关系的,是堆内存,他们都是使用默认的对块。
如果不同模块的就不应该这样释放了,比如一个dll申请的内存,如果有引用他的exe(或者其他的dll)来释放,那么就可能有问题了。以前我封装7z压缩库就犯过这样错误。在dll导出函数返回值带出来的内存,在调用它的模块中使用释放,结果崩溃了,当时摸不着头。 不同模块之间的内存传递,如果某模块带出一个申请的内存给外部,那么它也应该提供一个对应的释放内存的函数
ok  了解了

以前一直认为  由调用者申请 由调用者释放  你最后的一句   “,如果某模块带出一个申请的内存给外部,那么它也应该提供一个对应的释放内存的函数”  这种情况没遇到过呢

DO IT YOURSELF !
2014-03-05 21:12
快速回复:一题多解 出一道最easy的题目(关于去除字符串中所有空格的,题目及样 ...
数据加载中...
 
   



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

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