2009년 12월 20일 일요일

문자열 뒤집기

①. 메모리는 사용한 변환
   int rev()
   {
       char string[20] = "this is test";
       char reverse[20];
       int i, j = 0;

       for( i = strlen(string); i 》= 0; i--)
          reverse[j++] = string[i];

      reverse[j] = '\\0'; // 이 부분(死)을 잘 빠뜨리는데 주의할 것!!

   }

②. 별도의 메모리는 사용하지 않고 변환
   int rev()
   {
       char s[20] = "this is test";
       char temp;
       int len = strlen(s);
       int i;

       for( i = 0; i 《 len/2 ; i++) {
          temp = s[i];
          s[i] = s[len - 1 - i];
          s[len - 1 - i] = temp;
       }

   }

   문자가 2byte는 기본으로 하는 한국어일 경우는 힘들겠죠??

③. 재귀함수 이용
   char *s = "this is test";

   void rec(void)
  {
      if( *p == NULL) // 종결조건
         return;

      p++; // 전진방법
      rec();
      p--; // 수행방법
      putchar(*p);

      return;
   }

   * recursive(재귀함수) 코딩하는 방법에 꼭 갖추어야 할 요건
     ①. 전진방법
     ②. 종결조건
     ③. 수행방법

④. 스택 이용
    void rev(char string[])
    {
       int i;
       int top = 0;

       for( i = 0; s[i] != '\\0'; i++)
          PUSH(&top, s[i]);

       for( i = 0; s[i] != '\\0'; i++)
          s[i] = POP(&top);

    }


댓글 없음:

댓글 쓰기