개요
프로그래밍 언어 : C언어
과제 수행 날짜 : 2020.10.09
과제 개요 : 3차원 배열을 이용하여 입력받은 문자들의 빈도수를 계산
코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char statement[2][2][100];
char record[62] = { 0, };
int count;
int a_s = 36; // a가 시작하는 record 배열의 인덱스
int A_s = 10; // A가 시작하는 record 배열의 인덱스
for (int a = 0; a < 4; a++)
{
scanf("%s", &statement[a / 2][a % 2][0]); // 문자열 4번 입력받기
}
for (int b = 0; b < 4; b++)
{
int strsize = strlen(statement[b / 2][b % 2]);// strlen이 unsigned int를 반환하기 때문에 생기는 에러를 없애기 위해 int로 선언
for (int c = 0; c < strsize; c++)
{
if (statement[b/2][b%2][c] - 'a' >= 0) // 소문자
{
record[(statement[b / 2][b % 2][c] - 'a')+a_s]++;
}
else if (statement[b / 2][b % 2][c] - 'A' >= 0) // 대문자
{
record[(statement[b / 2][b % 2][c] - 'A')+A_s]++;
}
else if (statement[b / 2][b % 2][c] - '0' >= 0) // 숫자
{
record[statement[b / 2][b % 2][c] - '0']++;
}
}
}
// 결과 출력
for (count = 0; count < 62; count++)
{
if (count >= a_s)
{
printf("\n%c: %d times", count + ('a'-a_s), record[count]);
}
else if (count >= A_s)
{
printf("\n%c: %d times", count + ('A'-A_s), record[count]);
}
else
{
printf("\n%c: %d times", count + '0', record[count]);
}
}
return 0;
}
결과
record[62]라는 배열 안에 0~9까지는 숫자를 입력하고, 10~35까지는 대문자를 입력하고, 36~61까지는 소문자를 입력하도록 한다. 문자열을 4번 입력받으므로, 바깥 for 문에서 4번을 반복하도록 하고, 바깥 for 문에서는 값을 unsigned int로 반환되는 strlen을 int로 사용하기 위해 int 형 변수를 선언하여 값을 저장한다. 이때 저장한 값만큼 안쪽 for문을 돈다.
for문을 돌면서 만약 현재 statement 배열에 들어있는 값에서 'a'만큼 뺀 값이 0보다 크거나 같다면 소문자이고, 그렇지 않고 'A'만큼 뺀 값이 0보다 크거나 같다면 대문자, '0'만큼 뺀 값이 0보다 크거나 같으면 숫자임을 이용하여 record 배열에 해당 값 범위의 시작 값을 뺀 후, 해당 범위가 시작하는 인덱스의 값을 더해서 저장한다. 이렇게 for 문을 돌고 난 결과를 범위를 나눠서 숫자부터 대문자, 소문자를 각각 출력한다.
'프로젝트 & 과제 > 3학년' 카테고리의 다른 글
[C언어] char 포인터로 배열 읽기 (0) | 2022.02.03 |
---|---|
[C언어] 포인터로 배열 수정 (0) | 2022.02.02 |
[C언어] 2차원 배열 출력 (0) | 2022.01.30 |
[C언어] 2차원 배열의 합 (0) | 2022.01.29 |
[C언어] 홀짝 구분 (0) | 2022.01.28 |