C언어
[c언어] java split 처럼 구분자로 파싱하기 + 오른쪽 공백 삭제
xemaker
2017. 2. 1. 18:59
c언어에는 저바의 split 같은 함수가 없다.
그래서 만들어준다.
char *strsep(register char **stringp, register const char *delim){
register char *s;
register const char *spanp;
register int c, sc;
char *tok;
if((s=*stringp)==NULL)
return(NULL);
for(tok=s;;){
c=*s++;
spanp=delim;
do{
if((sc=*spanp++)==c){
if(c==0)
s=NULL;
else
s[-1]=0;
*stringp=s;
m_rtrim(tok);
return(tok);
}
}while(sc!=0);
}
}
//오른쪽 끝에 있는 공백 삭제
void m_rtrim(char *str){
char *pt;
int i;
for(pt=str+strlen(str)-1;(*pt==0x20) || (*pt==0xA1) ; pt--)
*pt = 0x00;
for(i=strlen(str)-1;i>=0;i--){
if(str[i]==0x20)
str[i]=0x00;
else
break;
}
}
사용시에는
char *from
char *value;
char buff[1000];
char work1[1000];
from=buff;
value=strsep(&from, "|"); strncpy(work1, value, sizeof(work1));
그래서 만들어준다.
char *strsep(register char **stringp, register const char *delim){
register char *s;
register const char *spanp;
register int c, sc;
char *tok;
if((s=*stringp)==NULL)
return(NULL);
for(tok=s;;){
c=*s++;
spanp=delim;
do{
if((sc=*spanp++)==c){
if(c==0)
s=NULL;
else
s[-1]=0;
*stringp=s;
m_rtrim(tok);
return(tok);
}
}while(sc!=0);
}
}
//오른쪽 끝에 있는 공백 삭제
void m_rtrim(char *str){
char *pt;
int i;
for(pt=str+strlen(str)-1;(*pt==0x20) || (*pt==0xA1) ; pt--)
*pt = 0x00;
for(i=strlen(str)-1;i>=0;i--){
if(str[i]==0x20)
str[i]=0x00;
else
break;
}
}
사용시에는
char *from
char *value;
char buff[1000];
char work1[1000];
from=buff;
value=strsep(&from, "|"); strncpy(work1, value, sizeof(work1));