C++で12時間形式から24時間形式へ時刻を変換するプログラム
C++を使えば、12時間形式(am/pm付き)で入力された時刻を24時間形式へ簡単に変換できます。この記事では、変換の基本ルール、アルゴリズム、実際に動作するサンプルコード、そして実行結果の順にわかりやすく解説します。
時刻変換の基本ルール
12時間形式から24時間形式への変換は、午前(am)か午後(pm)かによって処理が変わります。
- pm(午後)の場合:時間が12未満なら12を加算します(例:午後1時→13時)。時間がちょうど12の場合はそのまま12とします(正午は24時間制でも「12時」)。
- am(午前)の場合:時間が12未満ならそのまま使います。時間が12の場合は「00」に置き換えます(真夜中は24時間制で「0時」)。
- 上記以外の場合:「Wrong choice(不正な入力)」として処理します。
アルゴリズム
開始 main() 内で以下を実行する もし median が pm ならば 入力された時間が12未満かどうか確認する → 時間に12を加算し、24時間形式で時刻を出力する 入力された時間が12に等しいかどうか確認する → 時間は12のまま、24時間形式で時刻を出力する そうでなく median が am ならば 入力された時間が12未満かどうか確認する → そのまま24時間形式で時刻を出力する 入力された時間が12に等しいかどうか確認する → 時間を「00」として、24時間形式で時刻を出力する どれにも当てはまらない場合 → 「Wrong choice」を出力する 終了
サンプルコード
#include <iostream>
#include <string.h>
#include <iomanip>
using namespace std;
int main() {
int hours, minutes, seconds;
char median[10];
cout << "Enter hours, minutes, seconds:";
cin >> hours >> minutes >> seconds;
cout << "Enter median:";
cin >> median;
// 12時間形式で表示
// setw(): 出力の桁幅を指定、setfill(): 空き桁を埋める文字を指定
cout << "Time in 12 hour format:"
<< setfill('0') << setw(2) << hours << ":"
<< setw(2) << minutes << ":"
<< setw(2) << seconds << median << endl;
if (strcmp(median, "pm") == 0) { // 文字列比較(一致すると0を返す)
if (hours < 12) {
hours += 12; // 午後は12を加算
}
} else if (strcmp(median, "am") == 0) {
if (hours == 12) {
hours = 0; // 午前12時は「00」に変換
}
} else {
cout << "Wrong choice";
return 0;
}
// 24時間形式で表示
cout << "Time in 24 hour format:"
<< setfill('0') << setw(2) << hours << ":"
<< setw(2) << minutes << ":"
<< setw(2) << seconds << endl;
return 0;
}
実行結果
Enter hours, minutes, seconds:12 07 06 Enter median:pm Time in 12 hour format:12:07:06pm Time in 24 hour format:12:07:06 Enter hours, minutes, seconds:01 02 30 Enter median:pm Time in 12 hour format:01:02:30pm Time in 24 hour format:13:02:30 Enter hours, minutes, seconds:10 10 03 Enter median:am Time in 12 hour format:10:10:03am Time in 24 hour format:10:10:03 Enter hours, minutes, seconds:12 02 04 Enter median:am Time in 12 hour format:12:02:04am Time in 24 hour format:00:02:04
プログラムのポイント
strcmp() による文字列比較
string.h をインクルードして使用する strcmp() は、2つの文字列を比較する関数です。文字列が完全に一致した場合は 0 を返すため、strcmp(median, "pm") == 0 のようにして午前・午後を判定します。
setw() と setfill() による整形出力
iomanip をインクルードすることで利用できる setw(2) は出力の桁幅を2桁に設定し、setfill('0') は空いた桁を「0」で埋めます。これにより「1:2:3」ではなく「01:02:03」のように、時刻らしい整った表示になります。
注意点:比較には必ず「==」を使う
条件分岐で「等しいかどうか」を判定する際は、必ず比較演算子 == を使用してください。誤って代入演算子 = を使うと変数の値が上書きされ、条件が常に成立するなど予期しない動作の原因になります。
-
優先度スケジューリングを実装するC++プログラムの完全解説
はじめにn個のプロセス(P1、P2、P3、…、Pn)と、それぞれのプロセスに対応するバーストタイムおよび優先度が与えられます。本記事では、優先度CPUスケジューリングアルゴリズムを用いて、平均待ち時間・平均ターンアラウンド時間・プロセスの実行順序を求めるC++プログラムを解説します。待ち時間とターンアラウンド時間とは?ターンアラウンド時間とは、プロセスの投入から完了までの時間間隔のことです。ターンアラウンド時間 = プロセスの完了時刻 − プロセスの投入時刻待ち時間は、ターンアラウンド時間からバーストタイムを差し引いた値として求められます。待ち時間 = ターンアラウンド時間 − バーストタイム
-
摂氏を華氏に変換するC++プログラム
この記事では、C++を使って摂氏(℃)の温度を華氏(℉)に変換するプログラムを紹介します。摂氏から華氏への変換は、次のシンプルな数式で行えます。 F = (9 × C ÷ 5) + 32 ここで、Cは摂氏温度、Fは華氏温度を表します。例えば、摂氏37度は華氏98.6度に相当し、これは人間の平熱に近い値です。 アルゴリズム 処理の流れは以下の通りです。 開始 摂氏温度Cを入力する F = (9C/5) + 32 を計算する 結果Fを返す 終了 サンプルコード #include<iostream> using namespace std; int main() {