오늘은 혼공C 배열 파트의 도전 실전 예제를 풀어 볼 예정이다.
배열
배열은 동일한 데이터형을 가진 변수들의 집합으로, 한 번에 여러 개의 변수를 선언하는 방법이다. 각각의 배열 요소들은 인덱스를 활용하여 접근할 수 있고, 인덱스는 0으로 시작한다. 예를 들어 ' arr '이라는 배열의 세 번째 요소에 접근하기 위해서는 ' arr [2] ' 와 같이 인덱스를 사용하면 된다.
또한, 배열은 선언과 동시에 초기화를 진행할 수 있으며, 초기화는 아래의 예시와 같이 중괄호 안에 요소를 나열하여 할 수 있다.
int arr[5] = { 1, 2, 3, 4, 5};
아래와 같이 배열 요소의 개수가 생략된 형태로도 초기화를 진행할 수 있다.
int ary[] = { 1, 2, 3 }
추가로, 배열의 크기는 선언할 때 결정되며, 실행 중에 크기를 변경할 수 없다.
Char형 배열
Char형 배열을 선언할 때에는 널 문자( \0 )를 저장하기 위하여 저장한 문자열의 길이보다 최소한 하나 이상 크게 배열을 선언해야 한다.
널 문자란, char형 배열에 저장된 0을 의미하며, 아스키코드 값이 0인 문자를 널 문자라고 하는 이유는 널 문자가 문자열의 끝을 표시하는 용도로 쓰이기 때문이다.
char형 배열에는 문자열을 저장하는 변수 역할을 수행하므로 초기화된 이후에도 새로운 문자열을 저장할 수 있지만, 문자열의 길이가 다를 수 있으므로 일반 변수처럼 대입 연산자를 사용하는 것이 불가능하다. 이러한 경우에 쓰이는 함수는 'strcpy' 함수이다.
'strcpy'함수는 char형 배열에 새로운 문자열을 저장하는 함수로, 저장할 문자열의 길이를 파악하여 char형 배열에 문자열을 복사하는 역할을 수행한다. 'strcpy'함수에 접근하기 위해서는 'string.h' 헤더파일을 선언해야 한다.
char형 배열에 문자열을 입력할 때에는 'scanf'함수를 활용하여 입력할 수 있지만, 빈칸을 포함하여 문자열을 입력할 때에는 다른 방식을 활용하여 접근해야 한다.
문자열 입출력 전용 함수는 'gets' 함수와 'puts'함수가 존재한다. 'gets'함수는 빈칸을 포함하여 한 줄 전체를 문자열로 입력하는 역할을 수행하고, 이를 출력하는 함수는 'puts'함수이다.
대소문자 변환 프로그램
주어진 문제는 다음과 같다.
"키보드로 문장을 입력받은 후, 대문자를 찾아 소문자로 바꾸는 프로그램을 작성한다."
문제를 동작시킬 코드는 아래와 같다.
#include <stdio.h>
int main(void)
{
char str[80];
int cnt = 0;
printf("문장 입력 : ");
gets(str);
for (int i = 0; str[i] != '\0'; i++)
{
if (str[i] >= 'A' && str[i] <= 'Z')
{
str[i] += 'a' - 'A';
cnt++;
}
}
printf("바뀐 문장 :");
puts(str);
printf("바뀐 문자 수 : %d\n", cnt);
}
코드를 위에부터 하나씩 해석하면 다음과 같다.
우선, 최대 79글자의 문자열을 저장할 수 있는 문자 배열을 선언한 후, 대문자를 소문자로 변환시킨 횟수를 저장할 cnt 변수를 선언한다.
for문을 보면 ' int i = 0; str [i]!= '\0'; i++ '을 볼 수 있는데, 이는 입력받은 문자열을 처음부터 끝까지 탐색하는 반복문이며, '\0'은 문자열의 끝을 나타내는 널 문자를 의미한다.
if 문 내를 살펴보면 'a' - 'A'를 확인할 수 있는데, 이는 대문자를 소문자로 변환하기 위해 ASCII 코드값을 조정하는 동작을 수행하는 것이다. 대문자와 소문자 간의 아스키코드 값 차이는 'a' - 'A'이다.
위 코드를 실행하면 다음과 같은 결과가 출력되는 것을 확인할 수 있다.
'Language > C' 카테고리의 다른 글
혼공C : 함수, 도전 실전 예제 (0) | 2024.06.20 |
---|---|
혼공C : 반복문, 소수 출력 프로그램 (2) | 2024.06.17 |
혼공C : 선택문, 계산기 프로그램 (0) | 2024.06.17 |
혼공C : 연산자, 체중관리 프로그램 (0) | 2024.06.16 |