问题:

  1. 代码中使用了#include<bits/stdc++.h>这样的头文件,这是非标准的写法,不建议使用。应该根据实际需要引入相应的头文件,例如#include<iostream>#include<string>
  2. 使用using namespace std;会导致命名空间污染,不建议使用。可以使用std::前缀来指定命名空间,例如std::stringstd::cout
  3. 在循环中使用s.length()作为循环的条件,这样每次循环都会重新计算字符串的长度,效率较低。应该在循环外将字符串的长度保存到一个变量中,然后在循环中使用该变量。
  4. 在判断字符是否为数字时,使用了if (s[i]>='1'&&s[i]<='9'),这样只能判断字符是否为1到9之间的数字,不能判断0是否为数字。应该使用if (s[i]>='0'&&s[i]<='9')来判断字符是否为数字。
  5. 在判断字符是否为多余的字符时,使用了if (s[i]!='.'||s[i]!='0'&&s[i]!='.'),这样的逻辑是错误的。应该使用if (s[i]!='.' && s[i]!='0')来判断字符是否为多余的字符。
  6. 在判断是否有四个整数时,使用了if (cnt!=4) a[3]=temp;,这样的逻辑是错误的。应该使用if (cnt!=3) flag=false;来判断是否有四个整数。
  7. 在输出修正后的地址时,使用了printf("%d.%d.%d.%d",a[0],a[1],a[2],a[3]);,这是C语言的写法,不适用于C++。应该使用std::cout来输出。
  8. 缺少对输入合法性的检查,例如输入的字符串是否为空,是否包含非法字符等。

修改后的代码如下:

#include <iostream>
#include <string>

int main() {
    std::string s;
    std::cin >> s;
    
    bool flag = true;
    int a[4], temp = 0, cnt = 0;
    for (int i = 0; i < s.length(); i++) {
        if (s[i] >= '0' && s[i] <= '9') {
            temp = temp * 10 + (s[i] - '0');
        } else {
            if (s[i] != '.' && s[i] != '0') {
                flag = false;
            }
            if (temp) {
                a[cnt] = temp;
                temp = 0;
                cnt++;
            }
        }
    }
    if (cnt != 3) {
        flag = false;
    }
    a[3] = temp;
    for (int i = 0; i < 4; i++) {
        if (a[i] > 255) {
            flag = false;
            a[i] = 255;
        }
    }
    
    if (flag) {
        std::cout << "YES";
    } else {
        std::cout << "NO" << std::endl;
        std::cout << a[0] << "." << a[1] << "." << a[2] << "." << a[3];
    }
    
    return 0;
}
``
问题:Su_Zipei 家的 IP 地址出了点小状况电脑中记录的 IP 地址可能是一个非法的地址这使得他无法上网你需要帮他修正 IP 地址使得 IP 地址合法。具体的给出一个字符串表示 IP 地址如果原串合法则直接输出 YES否则先输出一个 NO再从新的一行中输出改正完的地址修改规则如下:1如果有数字大于 255修改为 255;2如果有多余的字符请去掉还原成 XYZK 的形式其中XYZK为不超过

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

免费AI点我,无需注册和登录