用C++解决以下问题:Su_Zipei 家的 IP 地址出了点小状况电脑中记录的 IP 地址可能是一个非法的地址这使得他无法上网你需要帮他修正 IP 地址使得 IP 地址合法。具体的给出一个字符串表示 IP 地址如果原串合法则直接输出 YES否则先输出一个 NO再从新的一行中输出改正完的地址修改规则如下:1如果有数字大于 255修改为 255;2如果有多余的字符请去掉还原成 XYZK 的形式其中X
以下是用C++解决该问题的代码:
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
bool isValidIP(const string& ip) {
vector<int> nums;
stringstream ss(ip);
string num;
while (getline(ss, num, '.')) {
if (num.empty() || num.size() > 3) {
return false;
}
for (char c : num) {
if (!isdigit(c)) {
return false;
}
}
int n = stoi(num);
if (n > 255) {
return false;
}
nums.push_back(n);
}
return nums.size() == 4;
}
string fixIP(const string& ip) {
vector<int> nums;
stringstream ss(ip);
string num;
while (getline(ss, num, '.')) {
int n = stoi(num);
nums.push_back(min(n, 255));
}
stringstream fixedIP;
for (int i = 0; i < 4; i++) {
fixedIP << nums[i];
if (i < 3) {
fixedIP << '.';
}
}
return fixedIP.str();
}
int main() {
string ip;
cin >> ip;
if (isValidIP(ip)) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
cout << fixIP(ip) << endl;
}
return 0;
}
这段代码首先定义了一个isValidIP
函数来判断给定的IP地址是否合法。该函数首先将IP地址按照.
进行分割,然后检查每个分割出来的字符串是否满足以下要求:不为空、长度不超过3、全部由数字组成、数字不大于255。如果满足这些要求,说明IP地址合法。
接下来定义了一个fixIP
函数来修正非法的IP地址。该函数首先将IP地址按照.
进行分割,并将每个分割出来的字符串转换为整数。然后将每个整数修正为不超过255的值。最后将修正后的整数重新拼接成IP地址的字符串形式。
在main
函数中,首先读入一个IP地址。然后通过调用isValidIP
函数来判断该IP地址是否合法。如果合法,则输出"YES";否则输出"NO"并调用fixIP
函数来修正IP地址并输出修正后的地址。
注意:该代码假设输入的IP地址是合法的,即满足题目中给定的条件。如果输入的IP地址不满足这些条件,则无法保证代码的正确性

原文地址: http://www.cveoy.top/t/topic/inLQ 著作权归作者所有。请勿转载和采集!
作者: 安全问答 免费AI点我,无需注册和登录