C++
 Computer >> コンピューター >  >> プログラミング >> C++

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」のように、時刻らしい整った表示になります。

注意点:比較には必ず「==」を使う

条件分岐で「等しいかどうか」を判定する際は、必ず比較演算子 == を使用してください。誤って代入演算子 = を使うと変数の値が上書きされ、条件が常に成立するなど予期しない動作の原因になります。

  1. 優先度スケジューリングを実装するC++プログラムの完全解説

    はじめにn個のプロセス(P1、P2、P3、…、Pn)と、それぞれのプロセスに対応するバーストタイムおよび優先度が与えられます。本記事では、優先度CPUスケジューリングアルゴリズムを用いて、平均待ち時間・平均ターンアラウンド時間・プロセスの実行順序を求めるC++プログラムを解説します。待ち時間とターンアラウンド時間とは?ターンアラウンド時間とは、プロセスの投入から完了までの時間間隔のことです。ターンアラウンド時間 = プロセスの完了時刻 − プロセスの投入時刻待ち時間は、ターンアラウンド時間からバーストタイムを差し引いた値として求められます。待ち時間 = ターンアラウンド時間 − バーストタイム

  2. 摂氏を華氏に変換する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() {