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);
  }
}

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.