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