Chinaunix首页 | 论坛 | 博客
  • 博客访问: 300596
  • 博文数量: 43
  • 博客积分: 628
  • 博客等级: 上士
  • 技术积分: 392
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-30 18:11
文章分类

全部博文(43)

文章存档

2014年(1)

2013年(8)

2012年(11)

2011年(23)

分类: C/C++

2013-04-19 14:10:04

由于最近在找工作,在一个笔试的题要求删除字符串中中所有的空格,比如原数组
  1. char array[]="I am Chinese . I can speak English";
要将原数组变成

  1. char array[]="IamChinese.IcanspeakEnglish";
当时时间紧迫,编写了一个函数,虽然完成了功能,但是用了两层循环,效率不高,晚上回家补写删除空格函数,内容如下:

  1. /************************************************************************/
  2. /* 删除字符串中指定字符 */
  3. /************************************************************************/
  4. void del_char(char* str,char ch)
  5. {
  6.     char *p = str;
  7.     char *q = str;
  8.     while(*q)
  9.     {
  10.         if (*q !=ch)
  11.         {
  12.             *p++ = *q;
  13.         }
  14.         q++;
  15.     }
  16.     *p='\0';
  17. }
这个函数的原理就是p,q指针指向同一个字符串,当q指针的值为要删除的字符时,q向前跳一个字符,但是p指向要删除的字符不动,q则判断新位置值是否为删除字符,如果不是,那么就从不是删除字符的位置的值赋给p指向空格的值,循环往前加,直到q=\0结束,但是当q结束了,但是p移植后面的值没有被删除,那么p='\0'则表示将后面的字符截断了。字符串的长度就变成p的位置。
阅读(1768) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~