Chinaunix首页 | 论坛 | 博客
  • 博客访问: 73269
  • 博文数量: 115
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-08 19:09
文章分类
文章存档

2015年(115)

我的朋友

分类: C/C++

2015-08-06 16:43:51

原文地址:删除指定字符串 作者:runningdark

编写函数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. }

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