You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
1.8 KiB
90 lines
1.8 KiB
#include <iostream>
|
|
#include <fstream>
|
|
#include <sstream>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
using namespace std;
|
|
|
|
struct WeatherData
|
|
{
|
|
string cityName;
|
|
int temperature;
|
|
int humidity;
|
|
int windSpeed;
|
|
};
|
|
bool readWeatherData(const string& filename, vector<WeatherData>& data)
|
|
{
|
|
ifstream File;
|
|
File.open(filename);
|
|
|
|
|
|
if(File.is_open())
|
|
{
|
|
string line;
|
|
char ws;
|
|
while (getline(File, line))
|
|
{
|
|
istringstream iss(line);
|
|
WeatherData weather;
|
|
|
|
if (getline(iss, weather.cityName, ',') &&
|
|
(iss >> weather.temperature >> ws >> weather.humidity >> ws >> weather.windSpeed))
|
|
{
|
|
data.push_back(weather);
|
|
}
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
cout << "无法打开文件 " << filename << endl;
|
|
return false;
|
|
}
|
|
File.close();
|
|
return true;
|
|
}
|
|
|
|
void findAndDisplayWeather(const string& cityName, const vector<WeatherData>& data)
|
|
{
|
|
bool found = false;
|
|
for (const auto& weather : data)
|
|
{
|
|
if (weather.cityName == cityName)
|
|
{
|
|
found = true;
|
|
cout << cityName << "的天气数据为:温度" << weather.temperature
|
|
<< ", 湿度" << weather.humidity
|
|
<< ", 风速" << weather.windSpeed << endl;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (!found)
|
|
{
|
|
cout << "未找到城市 " << cityName << " 的天气数据。" << endl;
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
string filename;
|
|
cout << "请输入文件名:";
|
|
cin >> filename;
|
|
|
|
string cityName;
|
|
cout << "请输入要检索的城市名:";
|
|
cin >> cityName;
|
|
|
|
vector<WeatherData> weatherData;
|
|
if (!readWeatherData(filename, weatherData))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
findAndDisplayWeather(cityName, weatherData);
|
|
|
|
return 0;
|
|
}
|
|
|