C trim replace函数

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <malloc.h> 
/***************************** 
 * 去掉字符串两头的空格,\t,\r,\n字符 
 *  
 * 对输入的字符指针做修改 
 * **************************/ 
char *trim(char *); 
/****************************** 
 * 字符串替换 
 *  
 * 把原始字符串中的某个字符串换成另一个字符串同时 
 * 把分配内存的指针指向输出字符串。 
 * 返回 替换 的次数如果大于0,应该调用free()回收内存 
 * ****************************/ 
int str_replace(char **,const char*,const char*,const char*); 
char *trim(str) 
char *str; 
{ 
 char *s; 
 char *e; 
 if(str==NULL)return str; 
 s=str; 
//还是用到strlen了. 
 e=&str[strlen(str)-1];         
 for(;(*s==' '||*s=='\n'||*s=='\t'||*s=='\r');s++); 
 for(;(*e==' '||*e=='\n'||*e=='\t'||*e=='\r');e--); 
 e++; 
 *e='\0'; 
 return s;         
} 
int str_replace(outStr,source,oldStr,newStr) 
char **outStr; 
const char *source; 
const char *oldStr; 
const char *newStr; 
{ 
        int s_len,o_len,n_len; 
        char *p_str=NULL; 
        char *p_tmp=NULL; 
        char *p_out=NULL; 
        int count=0; 
        *outStr=NULL; 
        if(source==NULL||oldStr==NULL||newStr==NULL)return 0; 
        s_len=strlen(source); 
        o_len=strlen(oldStr); 
        n_len=strlen(newStr); 
        //分配新以保证可以容纳替换后的新字符串 
        p_out=(char *)malloc((s_len+(s_len/o_len)*(n_len))); 
        if(NULL==p_out) 
          return 0; 
        //分配一个临时空间 
        p_tmp=(char *)malloc(s_len); 
        if(NULL==p_tmp) 
        { 
           if(p_out) 
                   free(p_out); 
          return 0; 
        } 
         memset(p_out,0,sizeof(p_out)); 
     while((p_str=strstr(source,oldStr))) 
     { 
             memset(p_tmp,0,s_len); 
        strncpy(p_tmp,source,p_str-source); 
        strcat(p_out,p_tmp); 
        strcat(p_out,newStr); 
        source=p_str+o_len; 
        count++; 
     } 
     if(count==0){ 
       free(p_out); 
       *outStr=NULL;  
     }else{ 
       strcat(p_out,source); 
       *outStr=p_out; 
     } 
    free(p_tmp); 
   return count;         
} 
int main() 
{ 
        char str[51]; 
        char *ret_str; 
        char *out_str; 
        int ret=0; 
        memset(str,0x0,sizeof(str)); 
        strcpy(str,"\n \t  hello,world! ") ; 
        printf("str [%s]\n",str); 
   ret_str=trim(str); 
   printf("ret_str [%s]\n",ret_str); 
   ret = str_replace(&out_str,"A$B$C$D$E$F$","$","[YOUKOUKAOKAOIII]"); 
   if(out_str) 
   { 
            printf("out_str : %s\n",out_str); 
     free(out_str); 
   } 
   printf("Compiled on %s at %s\n",__DATE__,__TIME__); 
   printf("Compiled file %s,line number : %d\n",__FILE__,__LINE__); 
  return 0;         
}
分享到: 更多