본문 바로가기

Native/C++

[String]join함수의 구현

[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]

'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