C++で指定された時刻を単語(英語表記)に変換する方法
このチュートリアルでは、デジタル形式で与えられた時刻を、英語の単語による表現に変換するC++プログラムについて解説します。
例えば「8:29」という時刻が入力された場合、「twenty nine minutes past eight(8時29分)」というように、人間が日常的に使う言葉の形式へと変換するのが目的です。
変換のルール
英語の時刻表現には特有の言い回しがあります。このプログラムでは以下のルールに従って変換を行います。
- 0分の場合:「〜 o' clock」(ちょうど〜時)
- 1分の場合:「one minute past 〜」(〜時1分過ぎ)
- 59分の場合:「one minute to 〜」(〜時1分前)
- 15分の場合:「quarter past 〜」(〜時15分過ぎ)
- 30分の場合:「half past 〜」(〜時半)
- 45分の場合:「quarter to 〜」(〜時15分前)
- 30分以内の場合:「〜 minutes past ○」(○時〜分過ぎ)
- 30分より後の場合:「〜 minutes to ○」(○時〜分前)
C++での実装例
#include <bits/stdc++.h>
using namespace std;
// 時刻を単語として出力する関数
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
プログラムの解説
このプログラムのポイントは以下の通りです。
1. 数値から単語への対応表
配列 nums に「zero」から「twenty nine」までの英単語を格納しています。これにより、分や時の数値をそのままインデックスとして単語に変換できます。
2. 特別な表現の処理
15分・30分・45分といった特定の分には「quarter」「half」といった専用の表現を使うため、条件分岐で先に判定しています。
3. 「past」と「to」の切り替え
分が30以下なら「past(〜時過ぎ)」、30より大きければ次の時刻までの残り分数を計算し、「to(〜時前)」という表現に切り替えます。このとき (h % 12) + 1 を使うことで、12時の次が1時になるよう処理しています。
このように、数値の時刻を自然な英語表現へ変換することで、音声読み上げアプリやアナログ時計の表示など、さまざまな場面で応用できるプログラムとなります。
-
数値を英語の単語に変換するCプログラムの書き方
数値で構成された文字列が与えられたとき、その数値を英語の単語(スペル表記)へ変換するのが本記事の課題です。例えば、入力が「361」であれば、出力は「Three hundred sixty one」となるようにします。この問題を解くためには、一の位・十の位・百の位・千の位など、それぞれの数字がどの桁に位置しているのかを意識することが重要です。なお、今回紹介するコードは最大4桁、つまり0から9999までの数値に対応しています。したがって、入力は0〜9999の範囲である必要があります。例として「1,111」を考えてみましょう。各桁は以下のように対応します。千の位:1(one thousand)百の位
-
Pythonで指定したリストをネストされたリスト(リストのリスト)に変換する方法
Pythonでは、リスト内の各要素を、それ自体がリストである形式へと変換したいケースがあります。つまり、要素そのものがリストになっている「ネストされたリスト(リストのリスト)」を作成するということです。本記事では、代表的な2つのアプローチ——反復処理を使う方法とastモジュールを使う方法——について、具体的なコード例とともに解説します。反復処理(イテレーション)を使う方法最も基本的なアプローチは、リストの各要素を1つずつ取り出し、それぞれをリスト形式に変換していく方法です。一時的なリスト(temp)を活用しながら変換を行い、最終的にすべての要素をまとめて、目的となる「リストのリスト」を生成しま