[String]str_replace함수의 구현
str_replace: 특정 문자열을 바꾸어서 반환한다.
gcc ver:2.95.4
os: linux
compile: gcc -o test test.c
require memory free: yes
[code]
#include <stdio.h>
#include <malloc.h>
int str_replace(char *,char *,char *,char **,int *);
int main(int argc,char **argv){
char *t="This is --- sample ---.--.-.--.-";
char *ret;
char *del="---";
char *rep="***";
int len=0;
str_replace(del,rep,t,&ret,&len);
printf("Before:%s %d\n",t,strlen(t));
printf("%s replace to %s\n",del,rep);
printf("After:%s %d\n",ret,strlen(ret));
free(ret);
return 0;
}
int str_replace(char *del,char *rep,char *str,char **ret,int *len){
int str_len=0;
int del_len=0;
int rep_len=0;
int tmp_len=0;
int cnt=0;
int c_cnt=0;
char *tmp="";
char *head=str;
str_len=strlen(str);
del_len=strlen(del);
rep_len=strlen(rep);
for(cnt;cnt<str_len;++cnt){
if(memcmp(str,del,del_len)==0){
tmp_len=strlen(tmp);
(*len)=tmp_len+c_cnt+rep_len;
if(((*ret)=(char *)malloc(sizeof(char)*(*len)+1))==NULL) return 1;
memset((*ret),0x0,sizeof(char)*(*len)+1);
memmove((*ret),tmp,tmp_len);
if(tmp_len>0) free(tmp);
memmove((*ret)+tmp_len,head,c_cnt);
memmove((*ret)+tmp_len+c_cnt,rep,rep_len);
str+=del_len;
head=str;
c_cnt=0;
tmp=(*ret);
}else{
++str;
++c_cnt;
}
if(str_len==c_cnt){
if(((*ret)=(char *)malloc(sizeof(char)*str_len+1))==NULL) return 2;
memset((*ret),0x0,sizeof(char)*str_len+1);
memmove((*ret),str-str_len,str_len);
(*len)=str_len;
break;
}
}
return 0;
}
[/code]
str_replace: 특정 문자열을 바꾸어서 반환한다.
gcc ver:2.95.4
os: linux
compile: gcc -o test test.c
require memory free: yes
[code]
#include <stdio.h>
#include <malloc.h>
int str_replace(char *,char *,char *,char **,int *);
int main(int argc,char **argv){
char *t="This is --- sample ---.--.-.--.-";
char *ret;
char *del="---";
char *rep="***";
int len=0;
str_replace(del,rep,t,&ret,&len);
printf("Before:%s %d\n",t,strlen(t));
printf("%s replace to %s\n",del,rep);
printf("After:%s %d\n",ret,strlen(ret));
free(ret);
return 0;
}
int str_replace(char *del,char *rep,char *str,char **ret,int *len){
int str_len=0;
int del_len=0;
int rep_len=0;
int tmp_len=0;
int cnt=0;
int c_cnt=0;
char *tmp="";
char *head=str;
str_len=strlen(str);
del_len=strlen(del);
rep_len=strlen(rep);
for(cnt;cnt<str_len;++cnt){
if(memcmp(str,del,del_len)==0){
tmp_len=strlen(tmp);
(*len)=tmp_len+c_cnt+rep_len;
if(((*ret)=(char *)malloc(sizeof(char)*(*len)+1))==NULL) return 1;
memset((*ret),0x0,sizeof(char)*(*len)+1);
memmove((*ret),tmp,tmp_len);
if(tmp_len>0) free(tmp);
memmove((*ret)+tmp_len,head,c_cnt);
memmove((*ret)+tmp_len+c_cnt,rep,rep_len);
str+=del_len;
head=str;
c_cnt=0;
tmp=(*ret);
}else{
++str;
++c_cnt;
}
if(str_len==c_cnt){
if(((*ret)=(char *)malloc(sizeof(char)*str_len+1))==NULL) return 2;
memset((*ret),0x0,sizeof(char)*str_len+1);
memmove((*ret),str-str_len,str_len);
(*len)=str_len;
break;
}
}
return 0;
}
[/code]
'Native > C++' 카테고리의 다른 글
[String]stripslashes함수의 구현 (0) | 2013.10.02 |
---|---|
[String]join함수의 구현 (0) | 2013.10.02 |
[Array]array_push_str함수의 구현 (0) | 2013.10.02 |
[Array]array_push_chr함수의 구현 (0) | 2013.10.02 |
[String]dstr_cat함수의 구현 (0) | 2013.10.02 |