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: