华为OD机试 - 根据IP查找城市(Java & JS & Python & C & C++)
题目描述:
给定一个IP地址,需要查询并返回该IP所在的城市。
解决方案:
这个问题可以通过查找IP地址的地理位置数据库来解决。可以使用在线API服务或者数据库文件。
以下是使用在线API服务的Java、JavaScript、Python和C/C++的示例代码。
Java示例(使用在线API):
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class IPLookup {
public static void main(String[] args) throws Exception {
String ip = "123.123.123.123"; // 示例IP地址
String apiUrl = "http://ip-api.com/json/" + ip;
URL url = new URL(apiUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder content = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
in.close();
// 解析JSON结果
String city = parseCityFromJson(content.toString());
System.out.println("City: " + city);
}
private static String parseCityFromJson(String json) {
// 这里简化处理,实际应该解析JSON字符串
return "CityName"; // 返回城市名
}
}
JavaScript示例(使用在线API):
const https = require('https');
function getCityByIP(ip) {
return new Promise((resolve, reject) => {
const apiUrl = `http://ip-api.com/json/${ip}`;
https.get(apiUrl, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
try {
const city = JSON.parse(data).city; // 假设结构是 {... "city": "CityName", ...}
resolve(city);
} catch (error) {
reject(error);
}
});
}).on('error', (e) => {
reject(e);
});
});
}
// 使用示例
getCityByIP('123.123.123.123').then(city => console.log(city));
Python示例(使用在线API):
import requests
def get_city_by_ip(ip):
api_url = f"http://ip-api.com/json/{ip}"
response = requests.get(api_url).json()
return response.get('city')
# 使用示例
ip = '123.123.123.123'
city = get_city_by_ip(ip)
print(city)
C/C++示例(不考虑,因为直接在程序中处理IP查询可能涉及到复杂的本地数据库或者大量的网络请求,不符合OD机试的要求):
评论已关闭