문자열 속에 앞뒤로 불필요한 숫자인 0 이 들어가 있는 경우에 이것을 제거하는 trim 매크로가 필요하여 하나 만들어 봤습니다. 스페이스문자(0x20) 과 숫자 0문자(0x30)를 제거해 줍니다.
이 매크로를 실행하면 아래와 같은 trim 된 결과를 얻을 수 있습니다.
결과가 원하는 대로 나와서 만족스럽군요.
#define FEE_TRIMZERO(_str) do { \
long pos = strlen(_str)-1; \
long exist_dot = 0; \
for( int ix=0; ix<pos; ix++ ) { \
if(_str[ix] ==0x2E) { \
exist_dot = 1; break; \
} \
} \
if( exist_dot) { \
for (; pos>=0; pos-- ) { \
if(_str[pos] == 0x30 || _str[pos] == 0x20) _str[pos] = 0x00; \
else if(_str[pos] == 0x2E) { _str[pos] = 0x00; break; } \
else break; \
} \
}\
while((_str[0] == 0x30 && _str[1] != 0x2E) ||_str[0] == 0x20) { \
for( int ix=0;ix<strlen(_str);ix++) _str[ix] = _str[ix+1]; \
} \
} while(0)
long pos = strlen(_str)-1; \
long exist_dot = 0; \
for( int ix=0; ix<pos; ix++ ) { \
if(_str[ix] ==0x2E) { \
exist_dot = 1; break; \
} \
} \
if( exist_dot) { \
for (; pos>=0; pos-- ) { \
if(_str[pos] == 0x30 || _str[pos] == 0x20) _str[pos] = 0x00; \
else if(_str[pos] == 0x2E) { _str[pos] = 0x00; break; } \
else break; \
} \
}\
while((_str[0] == 0x30 && _str[1] != 0x2E) ||_str[0] == 0x20) { \
for( int ix=0;ix<strlen(_str);ix++) _str[ix] = _str[ix+1]; \
} \
} while(0)
이 매크로를 실행하면 아래와 같은 trim 된 결과를 얻을 수 있습니다.
|00020.22000 => [20.22]
| 0020.2200 => [20.22]
|00023.00000 => [23]
|00000.22000 => [0.22]
|00020422000 => [20422000]
|10020.22001 => [10020.22001]
| 0020.2200 => [20.22]
|00023.00000 => [23]
|00000.22000 => [0.22]
|00020422000 => [20422000]
|10020.22001 => [10020.22001]
결과가 원하는 대로 나와서 만족스럽군요.
'컴퓨터활용 > 유닉스' 카테고리의 다른 글
문자열 숫자에 , 콤마로 세자리씩 분리하기 (0) | 2010.08.17 |
---|---|
unix tee 명령어 (1) | 2010.04.22 |
secure CRT 크랙하기 (0) | 2009.07.20 |
전역변수와 정적변수의 차이점 : Difference Between Static & Global Variable (0) | 2009.07.06 |
dlsym error Function not implemented (1) | 2009.07.06 |