写一个程序,将24小时格式时间转换为12小时格式。定义一个名为TimeMistake的异常类,处理用户输入的非法时间,比如10:65或者无效字符。c++
时间: 2024-02-24 15:55:34 浏览: 89
好的,以下是 C++ 实现:
```cpp
#include <iostream>
#include <string>
#include <sstream>
#include <stdexcept>
using namespace std;
class TimeMistake : public exception {
public:
TimeMistake(const char* msg) : exception(msg) {}
};
string convert_time(string time_str) {
try {
int hour, minute;
char separator;
stringstream ss(time_str);
if (!(ss >> hour) || !(ss >> separator) || separator != ':' || !(ss >> minute)) {
throw TimeMistake("Invalid time format");
}
if (hour < 0 || hour > 23 || minute < 0 || minute > 59) {
throw TimeMistake("Invalid time");
}
if (hour == 0) {
return "12:" + to_string(minute) + " AM";
} else if (hour < 12) {
return to_string(hour) + ":" + to_string(minute) + " AM";
} else if (hour == 12) {
return "12:" + to_string(minute) + " PM";
} else {
return to_string(hour - 12) + ":" + to_string(minute) + " PM";
}
} catch (TimeMistake& e) {
throw e;
}
}
int main() {
string time_str;
cout << "请输入24小时格式时间(HH:MM): ";
getline(cin, time_str);
try {
cout << convert_time(time_str) << endl;
} catch (TimeMistake& e) {
cerr << "Error: " << e.what() << endl;
}
return 0;
}
```
首先定义了一个名为 `TimeMistake` 的异常类,继承自 `exception` 类,用于处理非法时间的情况。
`convert_time` 函数接受一个表示时间的字符串参数,返回转换后的时间格式字符串。函数内部使用了 `stringstream` 类对字符串进行解析,如果解析失败则抛出 `TimeMistake` 异常。然后判断小时和分钟数是否在合法范围内,如果不是则也抛出 `TimeMistake` 异常。最后根据小时数的不同,返回不同的时间格式字符串。
在主程序中,先让用户输入时间字符串,然后调用 `convert_time` 函数转换并输出结果,如果发生异常则捕获并输出错误信息。注意使用 `cerr` 输出错误信息,以区分于标准输出。
阅读全文