以下是用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地址不满足这些条件,则无法保证代码的正确性

用C++解决以下问题:Su_Zipei 家的 IP 地址出了点小状况电脑中记录的 IP 地址可能是一个非法的地址这使得他无法上网你需要帮他修正 IP 地址使得 IP 地址合法。具体的给出一个字符串表示 IP 地址如果原串合法则直接输出 YES否则先输出一个 NO再从新的一行中输出改正完的地址修改规则如下:1如果有数字大于 255修改为 255;2如果有多余的字符请去掉还原成 XYZK 的形式其中X

标签: 科技


原文地址: http://www.cveoy.top/t/topic/inLQ 著作权归作者所有。请勿转载和采集!

作者: 安全问答       免费AI点我,无需注册和登录