c++从文件中读取时间窗口的开始时间和结束时间,取开始时间和结束时间的中值,并将结果按照中值从小到大的顺序排列。
时间: 2023-09-07 14:14:35 浏览: 74
用C++编写从文件中读取数据的程序
4星 · 用户满意度95%
好的,这是一个比较具体的问题,我可以给您提供一个简单的c++代码示例,来实现您的需求。
假设您的时间窗口数据存储在一个名为“data.txt”的文本文件中,每行有两个时间戳,分别表示起始时间和结束时间,如下所示:
```
2022-01-01 12:00:00 2022-01-01 13:00:00
2022-01-02 08:00:00 2022-01-02 10:00:00
2022-01-03 14:30:00 2022-01-03 15:30:00
```
以下是一个基本的c++代码示例,它将读取文件中的时间戳,计算中值并按照中值从小到大的顺序排列:
```c++
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include <chrono>
using namespace std;
// 定义一个表示时间戳的结构体
struct Timestamp {
chrono::system_clock::time_point start_time;
chrono::system_clock::time_point end_time;
};
// 将字符串转换为时间戳
chrono::system_clock::time_point str2time(const string& str) {
tm tm_time = {};
strptime(str.c_str(), "%Y-%m-%d %H:%M:%S", &tm_time);
return chrono::system_clock::from_time_t(mktime(&tm_time));
}
// 从文件中读取时间戳数据
vector<Timestamp> read_timestamps(const string& filename) {
vector<Timestamp> timestamps;
ifstream input_file(filename);
if (input_file.is_open()) {
string line;
while (getline(input_file, line)) {
Timestamp ts;
istringstream iss(line);
string start_str, end_str;
iss >> start_str >> end_str;
ts.start_time = str2time(start_str);
ts.end_time = str2time(end_str);
timestamps.push_back(ts);
}
input_file.close();
}
return timestamps;
}
// 计算时间戳的中值
chrono::system_clock::time_point median(const Timestamp& ts) {
auto duration = ts.end_time - ts.start_time;
return ts.start_time + duration / 2;
}
// 按照时间戳的中值排序
bool cmp(const Timestamp& ts1, const Timestamp& ts2) {
return median(ts1) < median(ts2);
}
// 输出时间戳
void print_timestamps(const vector<Timestamp>& timestamps) {
for (const auto& ts : timestamps) {
cout << chrono::system_clock::to_time_t(median(ts)) << endl;
}
}
int main() {
// 从文件中读取时间戳数据
vector<Timestamp> timestamps = read_timestamps("data.txt");
// 按照时间戳的中值排序
sort(timestamps.begin(), timestamps.end(), cmp);
// 输出时间戳
print_timestamps(timestamps);
return 0;
}
```
这段代码的基本思路是:
1. 定义一个表示时间戳的结构体,其中包含起始时间和结束时间的成员变量。
2. 定义一个函数来将字符串转换为时间戳。
3. 定义一个函数来从文件中读取时间戳数据,并将其存储在一个vector中。
4. 定义一个函数来计算时间戳的中值。
5. 定义一个比较函数,用于按照时间戳的中值排序。
6. 定义一个函数来输出排序后的时间戳。
7. 在main函数中依次调用上述函数,完成文件读取、中值计算、排序和输出的过程。
希望这个示例对您有所帮助,如果您有任何疑问,请随时向我提问。
阅读全文