문자배열

Programming/C 2006. 9. 13. 23:26

* 여러 행을 읽어서 그 중 문자가 가장 긴 행을 출력하는 프로그램을 작성한다.

프로그램 개요
while(읽을 행이 있으면)
  if(지금 읽는 행이 지금까지 가장 길었던 행보다 길면)
    그 행과 행의 길이를 기억
가장 긴 행을 출력

#include <stdio.h>
#define MAXLINE 1000  // 행의 최대 문자 길이 지정

int getline( char line[], int maxline );
void copy( char to[], char from[] );

/* print longest input line */

main(){
  int len;
  int max;
  char line[MAXLINE];
  char longest[MAXLINE];

  max = 0;
  while( ( len = getline( line, MAXLINE ) ) > 0 )
    if( len > max ){
      max = len;
      copy( longest, line );
    }
    if( max > 0 )
      printf( "%d %s", max, longest );

  return 0;
}

/* getline: s배열로 행을 읽고, 길이 반환 */
int getline( char s[], int lim ){
  int c, i;

  for( i = 0; i < lim - 1 && ( c = getchar() ) != EOF && c != '\n'; ++i )
    s[ i ] = c;
  if( c == '\n' ){
    s[ i ] = c;
    ++i;
  }
  s[ i ] = '\0';

  return i;
}

/* copy: from 배열을 to 배열로 복사; 크기가 너무 크지 않은지 확인 */
void copy( char to[], char from[] ){
  int i;

  i = 0;
  while( ( to[ i ] = from[ i ] ) != '\0' )
    ++i;
}
  • main에서 입력받을 line[1000] 배열과 최대허용문자 MAXLINE(1000)의 매개변수로 getline 함수를 호출한다.
  • 배열은 0부터 시작하므로 for문의 i가 최대 배열길이 999를 넘지 않고, 입력받은 문자가 EOF가 아니고, 행바꿈문자가 아니면 입력받은 문자길이만큼 s배열에 저장한다.
  • 행바꿈 문자를 입력받으면 지금까지 입력받은 문자 길이만큼 s배열에 저장하고 배열의 마지막 첨자에 \0을 입력하고 배열의 길이를 반환한다.
  • 반환된 길이가 max 변수보다 크면 max 변수에 그 길이를 저장하고 longest[1000]과 line[i] 배열의 매개변수로 copy 함수를 호출한다.
  • 파일의 끝이 아니라면 longest배열에 line배열을 저장한다.
  • main에서 최대문자수와 가장 긴 행을 출력한다.

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

,