컴퓨터활용/유닉스

C 로 구현한 right trim function

멜번초이 2008. 6. 16. 13:24
반응형
C의 제공 함수에서는 trim 하는 함수를 제공하지 않는다. 그 이유는 로직이 너무 간단하여 누구나 필요한 사람이 구현해서 사용하면 되기 때문에 굳이 제공하지 않는듯 하다. 그렇다면 strcpy나 strlen도 마찬가지로 간단한데 왜 제공되느냐고 묻는다면 할 말 없다.

char * rtrim( char *str ) {
     long pos = strlen(str)-1;

     for (; pos>=0; pos-- ) {
         if(str[pos] == 0x20)  
             str[pos] = 0x00;

         else
             return str;

     }
     return str;
}


이것을 매크로로 만들어 보면
#define  RTRIM(_str) do  {                        \
        long pos =  strlen(_str)-1;                  \
                                                     \
        for (; pos>=0; pos-- ) {                     \
            if(_str[pos] == 0x20) _str[pos] = 0x00;  \
            else  exit;                              \
        }                                            \
    } while(0)


그런데 인터넷에 찾아보니 이것과 똑같은 기능을 하는 함수로 이렇게 어렵게 짜는 방법도 있는 모양인데 뭔말인지 해석이 안 된다.

/*----------trim (char) c from right-side of string *p------------------*/
char *rtrim( register char *p, register c)
{
      register char *end;
      register int len;

      len = strlen( p);
      while ( *p && len)
     {
          end = p + len-1;
          if( c == *end)
               *end = 0;
         else
              break;
         len = strlen( p);
     }
     return( p);
}

코딩에서 주로 사용되는 헥사문자셋은

0x00 - null
0x09 - horizontal tab
0x0a - linefeed
0x0b - vertical tab
0x0c - form feed
0x0d - carriage return
0x20 - space


반응형