    01: #include <iostream>
    02: #include <sstream>
    03:
    04: using namespace std;
    05:
    06: /**
    07:    Converts an integer value to a string, e.g. 3 -> "3".
    08:    @param s an integer value
    09:    @return the equivalent string
    10: */
    11: string int_to_string(int n)
    12: {
    13:    ostringstream outstr;
    14:    outstr << n;
    15:    return outstr.str();
    16: }
    17:
    18: /**
    19:    Reads a time from standard input in the format hh:mm or
    20:    hh:mm am or hh:mm pm
    21:    @param hours filled with the hours
    22:    @param minutes filled with the minutes
    23: */
    24: void read_time(int& hours, int& minutes)
    25: {
    26:    string line;
    27:    getline(cin, line);
    28:    istringstream instr(line);
    29:
    30:    instr >> hours;
    31:
    32:    minutes = 0;
    33:
    34:    char ch;
    35:    instr.get(ch);
    36:
    37:    if (ch == ':')
    38:       instr >> minutes;
    39:    else
    40:       instr.unget();
    41:    /*
    42:       use
    43:          instr.putback(ch);
    44:       if your compiler doesn't support the ANSI unget function
    45:    */
    46:
    47:    string suffix;
    48:    instr >> suffix;
    49:
    50:    if (suffix == "pm")
    51:       hours = hours + 12;
    52: }
    53:
    54: /**
    55:    Computes a string representing a time.
    56:    @param hours the hours (0...23)
    57:    @param minutes the minutes (0...59)
    58:    @param military true for military format,
    59:    false for am/pm format,
    60: */
    61: string time_to_string(int hours, int minutes, bool military)
    62: {
    63:    string suffix;
    64:    if (!military)
    65:    {  if (hours < 12)
    66:          suffix = "am";
    67:       else
    68:       {  suffix = "pm";
    69:          hours = hours - 12;
    70:       }
    71:       if (hours == 0) hours = 12;
    72:    }
    73:    string result = int_to_string(hours) + ":";
    74:    if (minutes < 10) result = result + "0";
    75:    result = result + int_to_string(minutes);
    76:    if (!military)
    77:       result = result + " " + suffix;
    78:    return result;
    79: }
    80:
    81: int main()
    82: {
    83:    cout << "Please enter the time: ";
    84:
    85:    int hours;
    86:    int minutes;
    87:
    88:    read_time(hours, minutes);
    89:
    90:    cout << "Military time: "
    91:       << time_to_string(hours, minutes, true) << "\n";
    92:    cout << "Using am/pm:   "
    93:       << time_to_string(hours, minutes, false) << "\n";
    94:
    95:    return 0;
    96: }
    97: