c++从文件中读取时间窗口的开始时间和结束时间,取开始时间和结束时间的中值,并将结果按照中值从小到大的顺序排列。格式如下Point 1: 5:13:16 - 5:45:10
时间: 2023-11-14 21:14:28 浏览: 81
好的,我来解答你的问题。
首先,我们需要从文件中读取时间窗口的开始时间和结束时间。假设我们的文件名为input.txt,那么可以使用下面的代码读取文件中的内容:
```c++
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct TimeWindow {
string start_time;
string end_time;
};
bool compare_time_window(TimeWindow tw1, TimeWindow tw2) {
int time1 = stoi(tw1.start_time.substr(0, 2)) * 3600 + stoi(tw1.start_time.substr(3, 2)) * 60 + stoi(tw1.start_time.substr(6, 2));
int time2 = stoi(tw2.start_time.substr(0, 2)) * 3600 + stoi(tw2.start_time.substr(3, 2)) * 60 + stoi(tw2.start_time.substr(6, 2));
return time1 < time2;
}
int main() {
ifstream fin("input.txt");
vector<TimeWindow> time_windows;
string line;
while (getline(fin, line)) {
TimeWindow tw;
tw.start_time = line.substr(0, 8);
tw.end_time = line.substr(11, 8);
time_windows.push_back(tw);
}
fin.close();
// 排序
sort(time_windows.begin(), time_windows.end(), compare_time_window);
// 取中值
int n = time_windows.size();
string mid_time;
if (n % 2 == 0) {
string time1 = time_windows[n/2-1].end_time;
string time2 = time_windows[n/2].start_time;
int time1_sec = stoi(time1.substr(0, 2)) * 3600 + stoi(time1.substr(3, 2)) * 60 + stoi(time1.substr(6, 2));
int time2_sec = stoi(time2.substr(0, 2)) * 3600 + stoi(time2.substr(3, 2)) * 60 + stoi(time2.substr(6, 2));
int mid_time_sec = (time1_sec + time2_sec) / 2;
int hour = mid_time_sec / 3600;
int minute = (mid_time_sec - hour * 3600) / 60;
int second = mid_time_sec - hour * 3600 - minute * 60;
mid_time = to_string(hour) + ":" + to_string(minute) + ":" + to_string(second);
} else {
mid_time = time_windows[n/2].start_time;
}
// 输出结果
cout << "中值为:" << mid_time << endl;
cout << "按照中值从小到大的顺序排列:" << endl;
for (TimeWindow tw : time_windows) {
if (tw.start_time <= mid_time && mid_time <= tw.end_time) {
cout << "Point 1: " << tw.start_time << " - " << tw.end_time << endl;
}
}
return 0;
}
```
这里我们使用了一个结构体TimeWindow来存储每一个时间窗口的开始时间和结束时间。我们还定义了一个比较函数compare_time_window,用于将时间窗口按照开始时间从小到大排序。
接下来,我们需要取开始时间和结束时间的中值。如果时间窗口的个数是奇数,中值就是第n/2个时间窗口的开始时间;如果时间窗口的个数是偶数,中值就是第n/2-1个时间窗口的结束时间和第n/2个时间窗口的开始时间的平均值。
最后,我们按照中值从小到大的顺序输出时间窗口。由于时间窗口的起始时间有可能与中值相同,因此需要加上一个判断条件。
希望我的回答对你有所帮助!
阅读全文