컴퓨터활용/유닉스

0 문자를 트림하는 TRIMZERO 매크로

멜번초이 2009. 8. 12. 22:17
문자열 속에 앞뒤로 불필요한 숫자인 0 이 들어가 있는 경우에 이것을 제거하는 trim 매크로가 필요하여 하나 만들어 봤습니다.  스페이스문자(0x20) 과 숫자 0문자(0x30)를 제거해 줍니다.

#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)



이 매크로를 실행하면 아래와 같은 trim 된 결과를 얻을 수 있습니다.

|00020.22000 => [20.22]
| 0020.2200  => [20.22]
|00023.00000 => [23]
|00000.22000 => [0.22]
|00020422000 => [20422000]
|10020.22001 => [10020.22001]

결과가 원하는 대로 나와서 만족스럽군요.