프로젝트 & 과제/3학년

[C언어] 입력 문자 빈도수 계산

qqlzzb 2022. 1. 31. 15:30

개요

프로그래밍 언어 : 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;
}

결과

입력값
결과(입력값이 소문자 a, b 5개, 대문자 A, B 5개, 숫자 0, 1 5개)

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