[String]join함수의 구현
join: 문자열 배열을 del로 묶어 하나의 문자열로 합친다.
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 join(char *,char **,int,char **,int *);
int main(int argc,char **argv){
char *t[3];
char *ret;
char *del="---";
int len=0;
t[0]="This";
t[1]="is";
t[2]="sample";
join(del,t,3,&ret,&len);
printf("%s %d\n",ret,len);
free(ret);
return 0;
}
int join(char *del,char **arr,int arrcnt,char **ret,int *len){
char *tmp="";
int cnt=0;
int tmp_len=0;
int str_len=0;
int del_len=0;
del_len=strlen(del);
for(cnt;cnt<arrcnt;++cnt){
str_len=strlen(arr[cnt]);
tmp_len=strlen(tmp);
(*len)+=del_len+str_len;
if(((*ret)=(char *)malloc(sizeof(char)*(*len)+1))==NULL) return 1;
memset((*ret),0x0,sizeof(char)*(*len)+1);
if(cnt==0){
memmove((*ret),arr[cnt],str_len);
memmove((*ret)+str_len,del,del_len);
}else if((arrcnt-1)>cnt){
memmove((*ret),tmp,tmp_len);
memmove((*ret)+tmp_len,arr[cnt],str_len);
memmove((*ret)+tmp_len+str_len,del,del_len);
}else{
memmove((*ret),tmp,tmp_len);
memmove((*ret)+tmp_len,arr[cnt],str_len);
(*len)-=del_len;
}
if(tmp_len>0) free(tmp);
tmp=(*ret);
}
return 0;
}
[/code]
join: 문자열 배열을 del로 묶어 하나의 문자열로 합친다.
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 join(char *,char **,int,char **,int *);
int main(int argc,char **argv){
char *t[3];
char *ret;
char *del="---";
int len=0;
t[0]="This";
t[1]="is";
t[2]="sample";
join(del,t,3,&ret,&len);
printf("%s %d\n",ret,len);
free(ret);
return 0;
}
int join(char *del,char **arr,int arrcnt,char **ret,int *len){
char *tmp="";
int cnt=0;
int tmp_len=0;
int str_len=0;
int del_len=0;
del_len=strlen(del);
for(cnt;cnt<arrcnt;++cnt){
str_len=strlen(arr[cnt]);
tmp_len=strlen(tmp);
(*len)+=del_len+str_len;
if(((*ret)=(char *)malloc(sizeof(char)*(*len)+1))==NULL) return 1;
memset((*ret),0x0,sizeof(char)*(*len)+1);
if(cnt==0){
memmove((*ret),arr[cnt],str_len);
memmove((*ret)+str_len,del,del_len);
}else if((arrcnt-1)>cnt){
memmove((*ret),tmp,tmp_len);
memmove((*ret)+tmp_len,arr[cnt],str_len);
memmove((*ret)+tmp_len+str_len,del,del_len);
}else{
memmove((*ret),tmp,tmp_len);
memmove((*ret)+tmp_len,arr[cnt],str_len);
(*len)-=del_len;
}
if(tmp_len>0) free(tmp);
tmp=(*ret);
}
return 0;
}
[/code]
'Native > C++' 카테고리의 다른 글
[String]explode함수의 구현 (0) | 2013.10.02 |
---|---|
[String]stripslashes함수의 구현 (0) | 2013.10.02 |
[String]str_replace함수의 구현 (0) | 2013.10.02 |
[Array]array_push_str함수의 구현 (0) | 2013.10.02 |
[Array]array_push_chr함수의 구현 (0) | 2013.10.02 |