Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1004125
  • 博文数量: 150
  • 博客积分: 3017
  • 博客等级: 少校
  • 技术积分: 3829
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-19 14:40
个人简介

Now in Baidu WISE team

文章分类

全部博文(150)

文章存档

2014年(8)

2013年(31)

2012年(111)

分类: C/C++

2013-01-01 00:32:08

编写函数DelStr(str1,str2)。其中str1和str2为两个字符串。函数的功能是从str1中删除所有str2字串,结果由str1输出。函数没有返回值。例如,输入str1为“howareyouareGGGare”,str2为“are”,那么调用函数DelStr(str1,str2)后str1为“howyouGGG”
 
字符串基本功练手代码。codepad.org已验证。
一个比较复杂的字符串函数,从思考到完成25分钟左右。虽然代码写的傻但是一次无bug过。值得撒花,几个月来没有白练。
 

点击(此处)折叠或打开

  1. #include <string.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #define SWAP(a,b) a^=b;b^=a;a^=b

  5. char* mydelstr(char* src, const char* del){
  6.     if(src == NULL || !*src|| del==NULL || !*del) return src;
  7.     char* ret = src;
  8.     int dellen = strlen(del);
  9.     int srclen = strlen(src);
  10.     char* pEmpty = NULL;
  11.     char* pChar = NULL;
  12.     //replace the target with \0
  13.     while( (src = strstr(src, del))!=NULL){
  14.         int i = 0;
  15.         if(pEmpty == NULL)
  16.             pEmpty = src;
  17.         for(;i<dellen; i++)
  18.             src[i]='\0';
  19.         src+=dellen;
  20.         if(pChar == NULL)
  21.             pChar = src;
  22.     }

  23.     //re-orgnize
  24.     int i = 0;
  25.     while(pEmpty!=NULL && pChar!=NULL && *pChar){
  26.         SWAP(*pEmpty, *pChar);
  27.         while(*pEmpty!='\0') pEmpty++;
  28.         while(*pChar=='\0' && pChar<ret+srclen) pChar++;
  29.         if(pChar == ret+srclen)
  30.             break;
  31.     }
  32.     return ret;
  33. }

  34. int main(){
  35.     char src1[] = "abcdbce";
  36.     char* del1 = "bc";
  37.     char src2[] = "abc";
  38.     char src3[] = "a";
  39.     char src4[] = "bc";
  40.     
  41.     printf("case 1:%s \n", mydelstr(src1, del1));
  42.     printf("case 2:%s \n", mydelstr(src2, del1));
  43.     printf("case 3:%s \n", mydelstr(src3, del1));
  44.     printf("case 4:%s \n", mydelstr(src4, del1));
  45.     printf("------------end----------");
  46. }

阅读(1109) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~