배열(Array)

Programming/C 2006. 9. 13. 20:37
파일을 읽어서 그 파일 속에 각각의 숫자, 빈칸, 그 외의 문자들은 몇 개인지를 세는 프로그램을 작성한다. (0~9까지의 숫자는 배열로 처리)

#include <stdio.h>

/* count digits, white space, others */

main()
{
  // 각 변수 초기화
  int c, i, nwhite, nother;
  int ndigit[ 10 ];
  nwhite = nother = 0;
  for( i = 0; i < 10; i++ )
    ndigit[ i ] = 0;

  // 입력문자 구분
  while( ( c = getchar() ) != EOF )
  if( c >= '0' && c <= '9' )
    ++ndigit[ c - '0' ];
  else if( c == ' ' || c == '\n' || c == '\t' )
    ++nwhite;
  else
    ++nother;

  // 출력
  printf( "digits =" );
  for( i = 0; i < 10; ++i )
    printf( "%d ", ndigit[ i ] );
  printf( ", white space = %d, other = %d\n", nwhite, nother );
}

  • 문자를 입력받을 때마다 숫자인지 빈칸인지 그 외의 문자인지 체크를 한다.
  • 숫자가 입력되면 해당 ndigit[i] 배열 값이 1씩 증가한다.
  • 빈칸, tab, 행바꿈문자가 나오면 빈칸 변수인 nwhite가 1씩 증가한다.
  • 그 외의 문자들이 입력되면 nother이 1씩 증가한다.

if( c >= '0' && c <= '9' )
  ++ndigit[ c - '0' ];

예를 들어 숫자 '3'이 입력되면 c의 실제값은 숫자 3이 아니라 문자'3'의 값이 입력된 것이다.
원하는 숫자를 처리하기 위해서는 c에서 '0'을 빼주면 배열에 올바른 숫자가 할당될 것이다.
  • 문자'3'의 ASCII 값은 51
  • 문자'0'의 ACSII 값은 48

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,