예시코드:
int arr[5]; // 5개의 정수를 저장할 수 있는 배열
예시코드
int arr[5] = {1, 2, 3, 4, 5}; // 배열을 선언하고 초기화
배열에 저장된 모든 값을 반복문을 사용하여 순차적으로 접근할 수 있습니다.
예시코드
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
// char str[6] = "Hello";
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]); // 배열의 값을 출력
}
return 0;
}
2차원 배열은 행과 열을 가지며, 행렬처럼 데이터를 저장할 수 있습니다.
예시코드
#include <stdio.h>
int main() {
int arr[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", arr[i][j]); // 2차원 배열 순회
}
printf("\n");
}
return 0;
}
예시코드
#include <stdio.h>
int main() {
int arr[3] = {1, 2, 3};
// 배열 이름은 첫 번째 요소의 주소를 가리킴
printf("배열의 첫 번째 요소 주소: %p\n", arr);
printf("배열의 첫 번째 요소: %d\n", *arr); // 포인터를 사용한 접근
return 0;
}
포인터를 이용해 배열을 순회할 수도 있습니다.
예시코드
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr; // 배열의 첫 번째 요소를 가리키는 포인터
for (int i = 0; i < 5; i++) {
printf("%d ", *(ptr + i)); // 포인터를 이용한 배열 접근
}
return 0;
}
예시코드(malloc)
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr;
int n;
printf("배열의 크기를 입력하세요: ");
scanf("%d", &n);
// 동적으로 메모리 할당
arr = (int *)malloc(n * sizeof(int));
if (arr == NULL) {
printf("메모리 할당 실패\n");
return 1;
}
// 배열 값 입력받기
for (int i = 0; i < n; i++) {
printf("arr[%d] = ", i);
scanf("%d", &arr[i]);
}
// 배열 출력
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
// 동적으로 할당된 메모리 해제
free(arr);
return 0;
}
예시코드
arr = (int *)calloc(n, sizeof(int)); // 메모리 할당과 동시에 0으로 초기화
예시코드(realloc)
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr;
int n;
printf("배열의 크기를 입력하세요: ");
scanf("%d", &n);
// 동적 메모리 할당
arr = (int *)malloc(n * sizeof(int));
if (arr == NULL) {
printf("메모리 할당 실패\n");
return 1;
}
// 배열 값 입력 받기
for (int i = 0; i < n; i++) {
printf("arr[%d] = ", i);
scanf("%d", &arr[i]);
}
// 배열 크기 확장 (크기를 2배로 증가)
printf("배열 크기를 두 배로 확장합니다.\n");
arr = (int *)realloc(arr, 2 * n * sizeof(int)); // 배열 크기 변경
if (arr == NULL) {
printf("메모리 재할당 실패\n");
return 1;
}
// 새로운 배열의 값 입력 받기
for (int i = n; i < 2 * n; i++) {
printf("arr[%d] = ", i);
scanf("%d", &arr[i]);
}
// 배열 값 출력
for (int i = 0; i < 2 * n; i++) {
printf("%d ", arr[i]);
}
// 동적 메모리 해제
free(arr);
return 0;
}
int arr[5];
printf("배열의 크기: %zu\n", sizeof(arr)); // 배열의 전체 크기
printf("배열의 원소 개수: %zu\n", sizeof(arr) / sizeof(arr[0])); // 배열 원소의 개수
예시코드
#include <stdio.h>
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
printArray(arr, 5); // 배열과 크기를 함수로 전달
return 0;
}
예시코드
char str[6] = "Hello"; // 배열 크기 6, 마지막 '\0' 포함
예시코드
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello";
printf("문자열 길이: %zu\n", strlen(str)); // 5
return 0;
}
예시코드
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "apple";
char str2[] = "banana";
int result = strcmp(str1, str2);
if (result == 0) {
printf("두 문자열은 같습니다.\n");
} else if (result < 0) {
printf("%s는 %s보다 작습니다.\n", str1, str2);
} else {
printf("%s는 %s보다 큽니다.\n", str1, str2);
}
return 0;
}
#include <stdio.h>
#include <string.h>
int main() {
char str1[20], str2[] = "Hello, World!";
strcpy(str1, str2); // str2를 str1에 복사
printf("str1: %s\n", str1); // "Hello, World!"
return 0;
}
#include <stdio.h>
#include <string.h>
int main() {
char str1[20] = "Hello, ";
char str2[] = "World!";
strcat(str1, str2); // str2를 str1 뒤에 이어 붙임
printf("str1: %s\n", str1); // "Hello, World!"
return 0;
}
예시코드(fgets)
#include <stdio.h>
int main() {
char str[100];
printf("문자열을 입력하세요: ");
fgets(str, sizeof(str), stdin); // 안전하게 문자열 입력받기
printf("입력한 문자열: %s\n", str);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char *str;
int size = 50;
str = (char *)malloc(size * sizeof(char));
if (str == NULL) {
printf("메모리 할당 실패\n");
return 1;
}
// 문자열 입력 받기
printf("문자열을 입력하세요: ");
fgets(str, size, stdin);
// 문자열 크기 재할당
size += 50; // 새로운 크기
str = (char *)realloc(str, size * sizeof(char));
printf("입력한 문자열: %s\n", str);
// 동적 메모리 해제
free(str);
return 0;
}
#include <stdio.h>
int main() {
char str[100];
// 사용자로부터 문자열을 입력받음
printf("문자열을 입력하세요: ");
fgets(str, sizeof(str), stdin); // 문자열을 한 줄 입력받기
printf("입력한 문자열: %s\n", str);
return 0;
}
#include <stdio.h>
int main() {
char str[100];
// 사용자로부터 문자열을 입력받음
printf("문자열을 입력하세요: ");
scanf("%99[^\n]", str); // 개행문자를 기준으로 입력받기
printf("입력한 문자열: %s\n", str);
return 0;
}
1. 배열과 문자열을 이용한 회문 판별
- 문제 설명:
- 사용자로부터 문자열을 입력받고, 해당 문자열이 회문(palindrome)인지 판별하는 프로그램을 작성하세요.
- 회문이란, 앞에서 읽으나 뒤에서 읽으나 같은 문자열을 의미합니다.
- 문자열은 공백을 제외하고 비교해야 하며, 대소문자는 구분하지 않습니다.
- 예시 입력
madam
- 예시 출력
입력한 문자열은 회문입니다.
2. 문자열에서 중복 문자 제거
- 문제 설명:
- 사용자로부터 문자열을 입력받고, 해당 문자열에서 중복된 문자를 제거하는 프로그램을 작성하세요.
- 중복 문자가 있을 경우 첫 번째로 나타나는 문자만 남기고 나머지는 제거합니다.
- 예시 입력
programming
- 예시 출력
progamin
3. 두 문자열 합치기 (동적 메모리 사용)
- 문제 설명:
- 사용자로부터 두 문자열을 입력받고, 두 문자열을 합쳐서 새로운 문자열을 동적으로 할당한 메모리에 저장한 후 출력하는 프로그램을 작성하세요.
- 동적 메모리 할당(malloc)을 사용하여 새로운 문자열을 저장하고, free()로 메모리를 해제합니다.
- 예시 입력
Hello World
- 예시 출력
HelloWorld
4.
- 문제 설명:
- 사용자에게 두 개의 문자열을 입력받고, 두 문자열을 합친 후 알파벳 순서대로 정렬한 뒤, 중복된 문자를 제거하는 프로그램을 작성하세요. 이때, 동적 메모리 할당을 사용하여 입력받은 문자열을 처리합니다. 그리고 동적 메모리 할당을 해제해야 합니다.
- 제약 조건:
- 문자열의 길이는 최대 1000자입니다.
- 입력 받은 두 문자열의 길이가 각각 1000자 이하입니다.
- 입력 받은 문자열은 공백을 포함할 수 있으며, 공백도 문자로 취급합니다
- 예시 입력
apple banana
- 예시 출력
알파벳 순서대로 정렬된 문자열: abelnop