일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- vue3
- 프론트엔드
- 웹팩
- C
- 연결리스트
- 자바스크립트
- 프로세스
- 프로그래머스
- 포인터
- RxJS
- alexnet
- 자료구조
- 해시테이블
- 이진탐색
- APOLLO
- cors
- pytorch
- 배열
- 스택
- GraphQL
- 알고리즘
- 타입스크립트
- 코딩테스트
- 브라우저
- 큐
- Machine Learning
- 연결 리스트
- 컨테이너
- RT scheduling
- 릿코드
- Today
- Total
프린세스 다이어리
[C] 배열 선언방법, 문자열 정리 본문
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로 잘 출력된다.
'C, C++' 카테고리의 다른 글
[C] C언어에서 문자를 처리하는 방법, 문자와 버퍼의 관계 (0) | 2021.09.27 |
---|---|
[C] 포인터 개념, 활용방법 정리 (0) | 2021.09.26 |
[C] 함수 문법 정리 (0) | 2021.09.25 |
[C] 반복문 문법 정리 (0) | 2021.09.24 |
[C/C++] system("pause") 커맨드를 사용하면서 만난 에러와 새로 알게 된 것 정리 (0) | 2021.09.22 |