프린세스 다이어리

[C] 배열 선언방법, 문자열 정리 본문

C, C++

[C] 배열 선언방법, 문자열 정리

개발공주 2021. 9. 25. 12:19
728x90

1. 배열을 사용하는 이유

 

여러 개의 숫자가 있는 경우, 동일한 자료형을 여러 개 담는 기술이 필요하다.

0 1 2 3 4 5 6 7 8 9
6 5 4 3 9 8 0 1 2 7

위에 줄은 인덱스, 밑에 줄은 데이터다. 이 경우 데이터가 모두 int 형이면 int형 한 개당 4 bytes 이므로 총 40 bytes이다.

 

2. 배열의 선언 및 접근 방법

 

자료형 배열명[배열의 크기] = {초기화 값};

 

여기에서 초기화 값은 있을 수도, 없을 수도 있다. 배열의 크기가 3이면 초기화 값을 다음과 같이 넣어줄 수도 있고,

int array[3] = { 1, 2, 3 };

 

배열의 크기에 상관없이 모든 값을 0으로 넣어주고 싶다면 0 하고 ', ' 콤마를 넣어주면 알아서 전체 원소가 0으로 초기화되어 들어간다.

int array[50] = { 0, };

 

배열을 초기화하고 개별적인 값에 접근하는 기본적인 예시다.

#include <stdio.h> 

int main(void) {  
    int a[10] = {6,5,4,3,9,8,0,1,2,7};
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", a[i]);
    } 
}

 

배열의 원소 중 최댓값 찾기

#include <stdio.h> 
#include <limits.h> 

int main(void) {  
    int a[10] = {6,5,4,3,9,8,0,1,2,7};
    int i, maxValue = INT_MIN;
    for (i = 0; i < 10; i++)
    {
        if (maxValue < a[i]) maxValue = a[i];
    }
    printf("%d\n", maxValue);
}

 

다양한 자료형의 최댓값이나 최솟값 등 한계의 값을 알고 싶을 때 limits.h 파일을 불러와서 손쉽게 사용할 수 있다. INT_MIN은 limits.h 파일에 정리돼 있으며 -20억 정도의 숫자에 해당한다. 처음에 int형으로 표현할 수 있는 숫자 중 가장 작은 숫자를 maxValue에 담기기 때문에 for문을 돌면서 더 큰 값을 발견하면 maxValue 값으로 재할당해주는 것이다.

 

INT_MIN은 최댓값을 구하기 위해 자주 사용되는 기능이다. INT_MAX 또한 사용할 수 있다. 

 

3. 문자열과 배열

 

C언어는 기본적으로 문자열(문자의 배열) 자료형을 제공하지 않는다. 문자(Character)를 여러 개 묶어 놓는 형태로 문자열을 표현한다. C++에서는 이러한 불편함을 보완하기 위해 문자열 자료형 string을 제공한다. 

 

C언어에서는 하나의 문자는 1바이트 만을 담으므로, 문자의 배열을 표현하기 위해서 다음과 같이 작성한다.

char a[20] = "HELLO WORLD";

20자 배열을 선언한 다음에, 문자 배열을 할당하는 것이다. 기본적으로 문자열을 선언할 때는 문자열의 크기보다 배열의 크기가 크도록 해야 한다.

 

#include <stdio.h>

int main(void) {  
    char a[20];
    scanf("%s", a);
    printf("%s\n", a);
}

입력받은 문자를 그대로 출력하는 코드다. 여기에서 왜 scanf("%s", &a);를 쓰면 "warning: format specifies type 'char *' but the argument has type 'char (*)[20]' " 에러가 나는지는 잘 이해 못했으나 이 글을 보고 고쳐서 해결했다. 

 

파이썬에서는 특정 문자열의 인덱스에 접근하는 것이 C보다는 까다로운데, C에서는 문자 배열을 사용하기 때문에 인덱스로 바로 접근할 수 있다는 장점이 있다. 

#include <stdio.h>

int main(void) {  
    char a[20] = "hello eunjin";
    a[4] = ',';
    printf("%s\n", a);
}

문자열은 "" 큰따옴표로 초기화할 수 있다. 그리고 a[4]에 값을 재할당할 때 a[4] = ",";라고 작성하니까 "warning: incompatible pointer to integer conversion assigning to 'char' from 'char [2]' [-Wint-conversion]" 에러가 나서 찾아보니 큰따옴표는 여러 개의 문자, 홑 따옴표는 한 개의 문자를 표현할 때 쓰는 거였다. 

hell, eunjin

문자가 잘 치환되어 출력된다.

 

문자열에 포함된 특정 문자 개수 출력하기

#include <stdio.h>

int main(void) {  
    char a[] = "hello eunjin";
    int count = 0;
    for (int i = 0; i < 10; i++)
    {
        if (a[i] == 'l') count++;
    }
    printf("%d\n", count);
}

특정한 문자열을 사전에 정의해주는 경우 몇 글자인지 명시해주지 않아도 배열의 크기가 정해진다. 값은 2로 잘 출력된다.

728x90
Comments