题解 | #合法IP# 很多边界条件需要注意

合法IP

https://www.nowcoder.com/practice/995b8a548827494699dc38c3e2a54ee9

#include <iostream>
using namespace std;

int main() {
    string ip;
    auto checkStr = [](string & str) {
        // 注意这个边界条件,子串必须不为空
        if (str.size() == 0) {
            return false;
        }
        for (int i = 0; i < str.size(); i++) {
            char c = str[i];
            // 首字符是0且string长度大于1也不是合法IP,只有字符长度是1的情况下才合法
            if (i == 0 && str.size() > 1 && c == '0') {
                return false;
            }
            // 非数字不是合法IP
            if (!std::isdigit(c)) {
                return false;
            }
        }
        // 数字范围在0 ~255
        int num = std::stoi(str);
        if (num < 0 || num > 255) {
            return false;
        }
        return true;
    };
    while (getline(cin, ip)) {
        int parts = 0;
        auto pos = ip.find('.');
        string res("YES");
        while (pos != string::npos) {
            auto subStr = ip.substr(0, pos);
            if (!checkStr(subStr)) {
                res = "NO";
                break;
            }
            parts++;
            ip = ip.substr(pos + 1);
            pos = ip.find('.');
        }
        // check最后一part
        if (!checkStr(ip)) {
            res = "NO";
        }
        parts++;
        // 必须有四部分且合格
        if (parts != 4) {
            res = "NO";
        }
        cout << res << endl;
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

07-01 13:37
门头沟学院 Java
steelhead:不是你的问题,这是社会的问题。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务