免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4855 | 回复: 11
打印 上一主题 下一主题

关于字符串移位的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-17 20:17 |只看该作者 |倒序浏览
在写一个小程序,一个字符串遇到空格过滤掉,用后面的填补空格,类似于this is test,改成thisistest.不想再用一个字符串,可是在本身上进行操作我也想不到怎么办,递归的话自己也不会写.求教各位高手,给点提示和例子.

论坛徽章:
0
2 [报告]
发表于 2011-06-17 20:33 |只看该作者
用sscanf读,用sprintf写,char *专用。
用istringstream读,用ostringstream写,string专用。

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
3 [报告]
发表于 2011-06-18 11:53 |只看该作者
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         char str[] = "this is test";

  5.         char* p2 = str;
  6.         for( char* p1=str; *p1; ++p1 )
  7.         {
  8.                 if( *p1 != ' ' )
  9.                         *(p2++) = *p1;
  10.         }
  11.         *p2 = '\0';

  12.         printf( "%s\n", str );

  13.         return 0;
  14. }
复制代码

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
4 [报告]
发表于 2011-06-18 19:22 |只看该作者
回复 3# bruceteen


    真可谓是居家旅行必背小代码呀~

论坛徽章:
0
5 [报告]
发表于 2011-06-18 20:03 |只看该作者
Boost库的 String Algo  中有replace_all函数,只需要repalce " " with "" (Empty) 就可以了

论坛徽章:
0
6 [报告]
发表于 2011-06-19 21:57 |只看该作者
看了3楼的代码才恍然想到
干嘛要用递归啊

论坛徽章:
0
7 [报告]
发表于 2011-06-20 12:45 |只看该作者
回复 3# bruceteen


    膜拜,神一样的代码阿。

论坛徽章:
0
8 [报告]
发表于 2011-06-20 13:18 |只看该作者
用sscanf读,用sprintf写.怎么用

论坛徽章:
0
9 [报告]
发表于 2011-06-20 13:34 |只看该作者
bruceteen 发表于 2011-06-18 11:53



   

亮点在于
...
                if( *p1 != ' ' )
                        *(p2++) = *p1;
...

论坛徽章:
0
10 [报告]
发表于 2011-06-23 10:44 |只看该作者
递归嘛
  1. #include <stdio.h>

  2. char* trim(char*);
  3. char* add_to_head(char head, char* str);

  4. int main(int argc, char** argv)
  5. {
  6.     if(argc != 2)
  7.     {
  8.         printf("Args not correctly supplied\nUsage:trim string\n");
  9.         exit(1);
  10.     }

  11.     char* res = trim(argv[1]);
  12.     printf("Trim of %s is:%s\n", argv[1], res);

  13.     return 0;
  14. }


  15. char* trim(char* message)
  16. {
  17.     char *next = message + 1;
  18.     if(*message == '\0')
  19.     {
  20.         return "";
  21.     }
  22.     else if(*message == ' ')
  23.     {
  24.         return trim(next);
  25.     }
  26.     else
  27.     {
  28.         return add_to_head(*message,trim(next));
  29.     }

  30. }

  31. /*
  32. *Add a character to the head of a String
  33. */
  34. char* add_to_head(char head, char* str)
  35. {
  36.     char* local = (char*)malloc(sizeof(char*));
  37.     char* p = str;
  38.     *local = head;
  39.     int i;
  40.     for(i = 0; *p != '\0'; p++, i++)
  41.     {
  42.         local[i+1] = *p;
  43.     }

  44.     return local;
  45. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP