1.9 문자배열
실습 전 이론
배열 중 C에서 가장 많이 사용되는 배열은 문자배열(아마)
예를 들기 위해 프로그램을 하나 만들어보자
여러 행을 읽고, 그 중 가장 긴 행을 출력하는 프로그램을 작성해보자
실습
#include <stdio.h>
#define MAXLINE 1000
int getline(char line[], int maxline);
void copy(char to[], char from[]);
int 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("%s", longest);
return 0;
}
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;
}
void copy(char to [], char from[]){
int i;
i = 0;
while ((to[i] = from[i]) != '\0')
++i;
}
실습에 사용되는 예제 코드는 위와 같다.
(이대로 실행하면 오류가 난다. getline 이라는 함수가 이미 라이브러리에 있기 떄문이니까 임의로 변경하여 작성해주자)
코드가 좀 길다보니 쓰는데 시간이 좀 걸리긴 했는데.. 흠 어떤 방식으로 이해를 할까 하다가, 너무 디테일하게 정확한 내용을 처음부터 알기는 어려우니 대략적으로 함수별로 파악해보자
MAXLINE = 1000으로 고정
getline 함수 : 문자배열 s, 정수 lim 파라미터를 받아서 MAXLINE -1 보다 작고 EOF 이 아니면서 \n 이 아닐경우엔 s의 i번째 배열에 c를 넣는다.
만약 \n일 경우 s[i] 에 \n 을 넣고 i 에 1을 더한다? (근데 for문에서 이미 c != '\n' 조건에 거짓이 되는데 어떻게 if 문까지 닿지?)
아 for 문은 그냥 바로 다음 줄인 s[i] = c; 까지 였네;
간단하게 설명하면 입력 값을 받고 그걸 문자배열 s 에 저장, 배열의 마지막에는 null 선언, 그리고 몇 글자인지 (i) 를 리턴
main 함수 : getline을 실행해서 리턴한 값이 지금까지 받은 값중 가장 긴 문자인지 확인, 가장 길다면 지금 입력 값은 최댓값(max)로 선언한 뒤 copy 함수 실행
copy 함수 : 입력 값을 받아서 \0이 나올때 까지 to 문자배열에 하나씩 선언해준다. (복사하는 방식이 이렇게 되는구나..)
파이썬에서는 그냥 i = t 이런식으로 바로 문자열이 복사가 됐었는데 C에서는 인덱스 하나하나에 한글자씩 복사를 하는게 놀랍다..
실습 후 이론
위 코드에서 for문이 어디까지인지, while문이 어디까지 포함인지를 잘 인지를 못해서 좀 헤맸다.
파이썬은 들여쓰기로 인식을 했었는데 C는 그게 아니라... 코드를 좀 더 유심히 봐야겠다.

No comments to display
No comments to display