flag에 대한 고찰???

jiee의 이미지

The c programming language의 예제1-9를 보면,
"... 빈칸이 연달아 나오면 그것을 모두 한 칸으로 만들어 출력하라..."
고 합니다.

solution이라고 찾아서 봤더니 아래와 같이 짰더군요.

void func()
{
	int c;
	int inspace;
 
	inspace = 0;
	while((c = getchar()) != EOF)
	{
		if(c == ' ')
		{
			if(inspace == 0)
			{
				inspace = 1;
				putchar(c);
			}
		}
 
		/* We haven't met 'else' yet, so we have to be a little clumsy */
		if(c != ' ')
		{
			inspace = 0;
			putchar(c);
		}
	}
}

그런데, 저는 flag를 사용하는 코드는 다소 안 좋다고 생각하여 아래와 같이 작성하였습니다.

void func()
{
	char ch, before = 'a';
	while ( (ch = getchar()) != EOF)
	{
		if (before == ' ' && ch == ' ') continue;
		putchar(ch);
		before = ch;
	}
}

여러분의 생각은 어떠신지 궁금합니다.

송효진의 이미지

속도가 중요하다면,
매번 할당을 하는 아랫것 보다는
플래그 변동시만 할당되는 위에 것이 빠를것 같네요.

가독성이 중요하다면,
아랫것이 훨씬 낫겠죠.

emerge money

seank76의 이미지

할당이 비교보다 속도가 더 느리다고 가정할때 (이게 맞는지는 모르겠습니다만...)

다음과 같이 하면 원래 코드에서 할당하는걸 비교로 바꿨으니 더 빠를수도.... 물론 런타임 테스트 절대 해본적 없습니다. ㅎㅎ

void func()
{
  char ch;
  int inspace = 0;
  while ( (ch = getchar()) != EOF)
  {
    if (ch == ' ') {
     inspace = 1;
     continue;
    }
 
   if (inspace) {
    putchar(' ');
     inspace = 0;
    }
    putchar(ch);
  }
}