免费注册 查看新帖 |

Chinaunix

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

[C] 求一个空格过滤程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-12 20:19 |只看该作者 |倒序浏览
恩,我要写一个字符数组空格过滤函数,查找空格然后用'\0'代替对于结尾是空格的来说可以,但是对于类似于"test test"这样的就不行了,后面的直接截断没有了,想过截取后面和前面的,然后拼接,可是如果空格太多的话,显然效率不好,所以征集大家意见,提供思路或者一点代码,谢谢.

论坛徽章:
0
2 [报告]
发表于 2011-05-12 20:24 |只看该作者
你将空格用'\0'替换,等于截断字符串,如果空格在字符串中间,等于截断字符了。

看你的意思,就是要去除空格,再开个辅助数组,将原字符串中非空格字符写入辅助数组就可以了,这是最简单的。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
3 [报告]
发表于 2011-05-12 22:17 |只看该作者
从头开始遍历,若发现空格,则继续找第一个不是空格的,然后复制其后的字符直到空格或者结束符。重复上述过程。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
4 [报告]
发表于 2011-05-13 07:47 |只看该作者
你是分解吧,看看strtok這個函數。

论坛徽章:
0
5 [报告]
发表于 2011-05-13 13:39 |只看该作者
#include <string.h>
#include <stdio.h>
int main(void)
{
    char input[16] = "abc def hi jk";
    char *p;
    char output[16];
    char *q;
    int count;

    memset(output, 0, 16);
    q = output;
    p = strtok(input, " ");
    while (p)
    {
     count = strlen(p);
     strcat(q,p);
     q = q + count;
     p = strtok(NULL, " ");      
    }
    printf("\n\r %s ", output);
    return 0;
}

小女子不才,根据楼上提示写了个小程序,不知道是不是可以满足楼主所说的要求哈.

论坛徽章:
30
黑曼巴
日期:2019-04-11 12:11:0215-16赛季CBA联赛之八一
日期:2019-06-11 14:31:1915-16赛季CBA联赛之八一
日期:2019-08-06 09:37:182016科比退役纪念章
日期:2020-04-26 09:09:56黑曼巴
日期:2020-12-23 10:47:1015-16赛季CBA联赛之吉林
日期:2021-04-02 13:50:272016科比退役纪念章
日期:2022-08-01 15:03:15黑曼巴
日期:2023-10-07 16:19:58黑曼巴
日期:2018-09-12 13:34:41CU十四周年纪念徽章
日期:2018-06-19 21:17:58洛杉矶湖人
日期:2015-03-02 16:07:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
6 [报告]
发表于 2011-05-13 13:55 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2011-05-13 17:17 |只看该作者
  1. /****************************************************
  2. *
  3. *过滤掉字符串里的某个字符,这个函数在int parsecupsfile(char *filename) 用到
  4. *
  5. ****************************************************/
  6. char * deleteStr(char *str,char *pc)
  7. {
  8. int i=0;
  9. int j=0;
  10. for (i=0,j=0; i<strlen(str); i++)
  11. {
  12. if ( str[i] != pc[0] )
  13. {
  14. str[j] = str[i];
  15. j++;
  16. }
  17. }
  18. str[j] = '\0';
  19. return str;
  20. }
复制代码

论坛徽章:
0
8 [报告]
发表于 2011-05-13 17:18 |只看该作者
空格传参的时候试试 ' ' 就应该可以~ 我试过

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
9 [报告]
发表于 2011-05-13 21:36 |只看该作者

  1. /* strlnk.c */

  2. #include <string.h>

  3. char *strlnk(char *s)
  4. {
  5.         char *p, *n;

  6.         if (s == NULL) {
  7.                 return NULL;
  8.         }
  9.         p = s;
  10.         while (*p != '\0') {
  11.                 if (*p == ' ') {
  12.                         /* skip space */
  13.                         for (n = p; *n != '\0' && *n == ' '; n++) {
  14.                         }
  15.                         /* copy content */
  16.                         strcpy(p, n);
  17.                         /* move pointer to next content */
  18.                         p = n;
  19.                 }else {
  20.                         /* move pointer to next character */
  21.                         ++p;
  22.                 }
  23.         }
  24.         return s;
  25. }

  26. /* test */

  27. #include <stdio.h>

  28. int main(void)
  29. {
  30.         char text[] = "1 2 3 4 5 ";

  31.         printf("source: %s\n", text);
  32.         printf("result: %s\n", strlnk(text));
  33.         printf("length: %u\n", strlen(text));
  34.         return 0;
  35. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP