Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 주어진 시간을 영어 단어로 변환하는 방법

이 튜토리얼에서는 주어진 시간을 영어 단어 형태로 변환하는 프로그램을 다룹니다. 디지털 형식(hh:mm)으로 표현된 특정 시간이 입력으로 제공되며, 우리가 해야 할 작업은 해당 시간을 일상에서 흔히 쓰는 영어 시간 표현으로 바꾸는 것입니다.

시간 표현 규칙

영어권에서는 시간을 말할 때 분 값에 따라 다양한 관용 표현을 사용합니다. 이 프로그램은 아래 규칙에 따라 입력된 시간을 문자열로 변환합니다.

  • m == 0 : 정각 → "eight o' clock"
  • m == 1 : 1분 지났음 → "one minute past eight"
  • m == 59 : 다음 시까지 1분 남음 → "one minute to nine"
  • m == 15 : 15분 → "quarter past eight"
  • m == 30 : 30분 → "half past eight"
  • m == 45 : 다음 시까지 15분 남음 → "quarter to nine"
  • m <= 30 : "~ minutes past ~" 형식으로 지나간 분을 표현
  • m > 30 : "~ minutes to ~" 형식으로 남은 분을 표현

C++ 구현 예제

#include <bits/stdc++.h>
using namespace std;
//printing time in words
void convert_time(int h, int m){
    char nums[][64] = {
        "zero", "one", "two", "three", "four",
        "five", "six", "seven", "eight",
        "nine", "ten", "eleven", "twelve",
        "thirteen", "fourteen", "fifteen",
        "sixteen", "seventeen", "eighteen",
        "nineteen", "twenty", "twenty one",
        "twenty two", "twenty three",
        "twenty four", "twenty five", "twenty six",
        "twenty seven", "twenty eight", "twenty nine",
    };
    if (m == 0)
        printf("%s o' clock\n", nums[h]);
    else if (m == 1)
        printf("one minute past %s\n", nums[h]);
    else if (m == 59)
        printf("one minute to %s\n", nums[(h % 12) + 1]);
    else if (m == 15)
        printf("quarter past %s\n", nums[h]);
    else if (m == 30)
        printf("half past %s\n", nums[h]);
    else if (m == 45)
        printf("quarter to %s\n", nums[(h % 12) + 1]);
    else if (m <= 30)
        printf("%s minutes past %s\n", nums[m], nums[h]);
    else if (m > 30)
        printf("%s minutes to %s\n", nums[60 - m], nums[(h % 12) + 1]);
}
int main(){
    int h = 8;
    int m = 29;
    convert_time(h, m);
    return 0;
}

출력 결과

twenty nine minutes past eight

코드 설명

핵심은 0부터 29까지의 숫자를 영어 단어로 미리 저장해 둔 배열 nums입니다. 31분 이상인 경우 60에서 분 값을 빼면 다음 정각까지 남은 분이 되므로 같은 배열을 그대로 재사용할 수 있습니다. 또한 (h % 12) + 1 계산을 통해 12시간제 기준의 다음 시(hour)를 간단히 구할 수 있습니다. 예제에서는 8시 29분이 입력되었으며, 29분은 30분 이하이므로 "twenty nine minutes past eight"(8시 29분 지났음)라는 문장이 출력됩니다.