My Window,Your Bridge!

关于技术,关于生活!


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;        
}

该日志的引用地址:

发表评论:



日历

网站目录

搜索

Powered By O-Blog | Template Modified By FengSe

Copyright 2003-2007 ZhangLiHai.Com.All Rights Reserved.