반응형

temp 배열을 사용하지 않고 싶다고 하셨는데,

개인적인 견해로는 사용하는게 가장 효율적인 프로그램을 만들 수 있습니다.

temp 배열 크기가 기껏해야 (님 프로그램에서는)100byte인데요..

요즘 컴퓨터 환경에서는 무시할 수 있을만큼 작은 크기입니다.

오히려 100byte라는 공간을 이용함으로서 더 빠른 프로그램을 작성할 수 있습니다.

아주 오래전에는 메모리 자원이 한정되어 있어서, 메모리를 절약하는 프로그램을 짜야했지만 시대가 변했습니다.

그렇다고해서 무한정 자원을 낭비하는 것은 어리석은 짓이고, 약간의 자원을 소모하더라도 더 빠른 프로그램을 짤 수 있다면 그렇게 하는게 가장 현명한 방법이죠.

void DeleteBlank(char *input)
{
   char buffer[128];
   char *p, *q;

   p = input;
   q = buffer;
   while( *p != '\0' )
   {
      if( !isspace(*p) )
      {
         *(q++) = *(p++);
      }
      else
      {
         p++;
      }
   }

   *q = '\0';
   strcpy( input, buffer );
}


포인터 p와 q를 써서 만들어봤습니다.
p는 input 배열의 첫 원소를 포인트시키고, q는 buffer의 첫 원소를 포인트시킵니다.
while 루프에서, p가 가르키는 문자가 NULL문자일 때까지 루프가 돌아가게 됩니다.

그리고 while 루프 안에서는 p가 가르키는 문자가 공백이면 p만 다음 원소를 증가시키게 하고(else부분),

p가 가르키는 문자가 공백이 아니면 p의 문자를 q로 복사시키고, p와 q를 하나씩 증가시킵니다.(if부분)

그리고 while루프가 완전히 돌게 되었을 때, 아쉽게도 buffer의 마지막에는 null문자가 들어가지 않습니다.

따라서 *q = '\0';라는 표현으로 널문자를 마지막에 채웁니다.

마지막으로 strcpy함수를 이용하여 input에 buffer를 복사합니다.

여기서 int isspace(char c);는 괄호안의 문자가 공백이면 참값을, 공백이 아니면 0을 리턴합니다. (ctype.h에 있는 표준 라이브러리 함수입니다.)

반응형

'C & C++ 관련' 카테고리의 다른 글

형 변환 연산자 사용 방법  (0) 2007.05.05
C 문법중 getline이 돌아가는 것이 이해가 안됩니다.  (0) 2007.05.05
exit(0), exit(1)  (0) 2007.04.24
Posted by Real_G