当前位置: 首页 > article >正文

C语言 | Leetcode C语言题解之第468题验证IP地址

题目:

题解:

char * validIPAddress(char * queryIP) {
    int len = strlen(queryIP);
    if (strchr(queryIP, '.')) {
        // IPv4
        int last = -1;
        for (int i = 0; i < 4; ++i) {
            int cur = -1;
            if (i == 3) {
                cur = len;
            } else {
                char * p = strchr(queryIP + last + 1, '.');
                if (p) {
                    cur = p - queryIP;
                }
            }
            if (cur < 0) {
                return "Neither";
            }
            if (cur - last - 1 < 1 || cur - last - 1 > 3) {
                return "Neither";
            }
            int addr = 0;
            for (int j = last + 1; j < cur; ++j) {
                if (!isdigit(queryIP[j])) {
                    return "Neither";
                }
                addr = addr * 10 + (queryIP[j] - '0');
            }
            if (addr > 255) {
                return "Neither";
            }
            if (addr > 0 && queryIP[last + 1] == '0') {
                return "Neither";
            }
            if (addr == 0 && cur - last - 1 > 1) {
                return "Neither";
            }
            last = cur;
        }
        return "IPv4";
    }
    else {
        // IPv6
        int last = -1;
        for (int i = 0; i < 8; ++i) {
            int cur = -1;
            if (i == 7) {
                cur = len;
            } else {
                char * p = strchr(queryIP + last + 1, ':');
                if (p) {
                    cur = p - queryIP;
                }
            }
            if (cur < 0) {
                return "Neither";
            }
            if (cur - last - 1 < 1 || cur - last - 1 > 4) {
                return "Neither";
            }
            for (int j = last + 1; j < cur; ++j) {
                if (!isdigit(queryIP[j]) && !('a' <= tolower(queryIP[j]) && tolower(queryIP[j]) <= 'f')) {
                    return "Neither";
                }
            }
            last = cur;
        }
        return "IPv6";
    }
}

http://www.kler.cn/news/340979.html

相关文章:

  • 【python 简易入门应用教程】第一部分:Python 基础
  • 信息安全工程师(40)防火墙技术应用
  • Word 首行缩进 2 字符怎么设置?具体步骤演示
  • html复习
  • 内容营销:基于大模型的内容再利用
  • 循环神经网络-LSTM网络
  • protobuf之Message
  • VirtualBox+Vagrant快速搭建Centos7系统【最新详细教程】
  • 库函数相关(上一篇补充)
  • WPF中的Window类
  • 【hot100-java】N 皇后
  • JavaScript 网页设计案例与技巧
  • Linux入门3——vim的简单使用
  • GEE 教程:利用Landsat函数计算不同缓冲区内的NDVI,NDWI和EVI的平均值
  • Django makemigrations时出现TypeError: ‘module‘ object is not iterable
  • minio简单使用
  • PostgreSQL中WITH查询公用表表达式
  • Jenkins新安装的插件ThinBackup,如何恢复之前的备份
  • YOLOv5改进——普通卷积和C3模块更换为GhostConvV2卷积和C3GhostV2模块
  • GO网络编程(五):海量用户通信系统3:整体框架与C/S通信总体流程【重要】