IP地址判断有效性

2023-11-12

IP地址判断有效性

标签(空格分隔): OJ_算法


1.题目

  • 判断输入的字符串是不是一个有效的IP地址
    详细描述:
  • 请实现如下接口
    boolisIPAddressValid(constchar* pszIPAddr)
    输入:pszIPAddr 字符串
    输出:true 有效的IP地址,false,无效的IP地址
  • 约束
    输入IP为XXX.XXX.XXX.XXX格式
    字符串两端含有空格认为是合法IP
    字符串中间含有空格认为是不合法IP
    类似于 01.1.1.1, 1.02.3.4 IP子段以0开头为不合法IP
    子段为单个0 认为是合法IP,0.0.0.0也算合法IP

2 代码实现

版本1:

int ConvertSubIPToInt(const char* sub_ip)
{
    if (sub_ip == NULL)
        return -1;
    int length = strlen(sub_ip);
    if (length < 1 || length>3)
        return -1;
    int sub_value = 0;
    for (int i = 0; i < length; i++)
    {
        if (sub_ip[i]<'0' || sub_ip[i]>'9')
            return -1;
        sub_value = 10 * sub_value + sub_ip[i] - '0';
    }
    return sub_value;
}
bool isIPAddressValid(const char* pszIPAddr)
{
    // 请在此处实现
    if (pszIPAddr == NULL || *pszIPAddr == '\0')
        return false;

    int szIPAddr_length = strlen(pszIPAddr);

    int index_start = 0;
    int index_end = szIPAddr_length - 1;

    //去除前边的空格
    while (pszIPAddr[index_start] == ' ')
    {
        ++index_start;
    }
    //去除后边空格
    while (pszIPAddr[index_end] == ' ')
    {
        --index_end;
    }
    if (index_end <= index_start)
        return false;

    int ip_length = index_end - index_start + 2;
    char *temp_ip=(char*)malloc(ip_length);
    strncpy(temp_ip, pszIPAddr + index_start, ip_length-1);
    temp_ip[ip_length - 1] = '\0';

    char* sub_ip = strtok(temp_ip, ".");
    int sub_ip_count = 0;
    int sub_ip_value;
    while (sub_ip != NULL)//ip分段,计数分段ip,并转换为0-255
    {
        sub_ip_count++;
        if (sub_ip_count > 4)
        {
            free(temp_ip);
            return false;
        }
        sub_ip_value= ConvertSubIPToInt(sub_ip);
        if (sub_ip_value < 0 || sub_ip_value > 255)
            {
                free(temp_ip);
                return false;
            }
        sub_ip = strtok(NULL, ".");
    }
    free(temp_ip);
    if (sub_ip_count != 4)
        return false;
    else
        return true;
}

版本2:

bool isIPAddressValid(const char* pszIPAddr)
{
    // 请在此处实现
    if (pszIPAddr == NULL || *pszIPAddr == '\0')
        return false;

    size_t szIPAddr_length = strlen(pszIPAddr);

    bool isValid = true;
    size_t index_start = 0;
    size_t index_end = szIPAddr_length - 1;

    //去除前边的空格
    while (pszIPAddr[index_start] == ' ')
    {
        ++index_start;
    }
    //去除后边空格
    while (pszIPAddr[index_end] == ' ')
    {
        --index_end;
    }

    int sub_value = 0;//转换每个子段的值
    int dot_mark_count = 0;//统计字符'.'的个数

    size_t sub_fisrt = index_start;//记录每个子段的第一个字符位置
    for (size_t i = index_start; i <= index_end + 1; i++)
    {
        if (pszIPAddr[i] >= '0'&&pszIPAddr[i] <= '9')
        {
            sub_value = 10 * sub_value + pszIPAddr[i] - '0';
        }
        else if (pszIPAddr[i] == '.' || i == index_end + 1)
        {
            if (i == index_start || pszIPAddr[i - 1] < '0' || pszIPAddr[i - 1]>'9')//判断第一位或者.的前后是否有数字
                return false;
            if (pszIPAddr[i] == '.')//统计点'.'的个数
            {
                dot_mark_count++;
                if (dot_mark_count > 3)
                    return false;
            }

            if (sub_value < 0 || sub_value>255)
                return false;
            if (sub_value != 0 && pszIPAddr[sub_fisrt] == '0')
                return false;

            sub_value = 0;//子段识别完毕,重新转换下一子段值
            sub_fisrt = i + 1;
        }
        else
            return false;
    }
    if (dot_mark_count != 3)//统计点'.'的个数
        return false;

    return true;
}

参见:https://www.zybuluo.com/songpfei/note/335965

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IP地址判断有效性 的相关文章

  • Elevator

    Elevator include
  • 链表的有序构建和查找

    题目描述 单链表结点的存储结构包含两部分 数据 下一结点指针 默认为空 单链表包含头结点 存储实际数据的结点位置从1开始 现输入一批无序的整数队列 编写程序完成以下要求 1 构建单链表并且把数据按递增顺序插入到链表中 并且统计非空指针发生变
  • LeetCode Roman to Integer(罗马数字转换)

    思路 罗马数字是 阿拉伯数字传入之前使用的一种数码 罗马数字采用七个罗马字母作数字 即 1 X 10 C 100 M 1000 V 5 L 50 D 500 记数的方法 相同的数字连写 所表示的数等于这些数字相加得到的数 如 3 小的数字在
  • 拯救007

    题目描述 在老电影 007之生死关头 Live and Let Die 中有一个情节 007被毒贩抓到一个鳄鱼池中心的小岛上 他用了一种极为大胆的方法逃脱 直接踩着池子里一系列鳄鱼的大脑袋跳上岸去 据说当年替身演员被最后一条鳄鱼咬住了脚 幸
  • 开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动。

    题目描述 开发一个坐标计算工具 A表示向左移动 D表示向右移动 W表示向上移动 S表示向下移动 从 0 0 点开始移动 从输入字符串里面读取一些坐标 并将最终输入结果输出到输出文件里面 输入 合法坐标为A 或者D或者W或者S 数字 两位以内
  • [华为OJ--C++]087-在字符串中找出连续最长的数字串

    题目描述 在字符串中找出连续最长的数字串 如果是输入字符串中连续最长的数字串长度为0 则只输出数字0 如果输入的字串中最长的数字字串只有一组 那么输出这个数字字串再加上数字字串长度 用逗号隔开 如果输入字串中有多个相同长度的数字字串 那么依
  • leetcode -day31 Subsets I II

    1 Subsets Given a set of distinct integers S return all possible subsets Note Elements in a subset must be in non descen
  • 51nod-1101 换零钱

    时间限制 1 秒 空间限制 65536 KB 分值 20 N元钱换为零钱 有多少不同的换法 币值包括1 2 5分 1 2 5角 1 2 5 10 20 50 100元 例如 5分钱换为零钱 有以下4种换法 1 5个1分 2 1个2分3个1分
  • boj 12

    DescriptionBig Johnsson Trucks Inc is a company specialized in manufacturing big trucks Their latest model the Godzilla
  • 18年西工大硕士研究生入学考试复试机试解答

    Headline 18年瓜大机试解答 Author 周小枫 Email weijinxiong ncu outlook com Date 2019 1 4 Brief 这是一份菜鸡帮更菜的鸡写的参 考code 经测试 以下code都OK 如
  • 数据结构题目汇总

    求整数最大间隔 性能 hash算法应用 题目描述 请输出数字序列的最大间隔 请使用以下伪随机数生成函数 rand32 生成伪随机数 int seed int rand return seed seed 214013L 2531011L gt
  • DS内排—直插排序

    目录 题目描述 思路分析 AC代码 题目描述 给定一组数据 使用直插排序完成数据的升序排序 程序要求 若使用C 只能include一个头文件iostream 若使用C语言只能include一个头文件stdio 程序中若include多过一个
  • 素数判断 python

    目录 题目描述 AC代码 题目描述 写一个判断素数的函数 在主函数输入一个整数 输出是否素数的信息 输入 判断次数和每次输入的任意整数 输出 每次的输入是否为素数 输入样例1 4 17 5 6 19 输出样例1 prime prime no
  • hdoj1052 Tian Ji -- The Horse Racing(贪心算法+2)

    田忌赛马 关键在于比较的次序 首先先比较两个人最慢的马 如果田忌的马快就直接赢下一分 count 如果更慢的话就用这匹慢马去与大王最快的马比赛 count 如果相等的话 再比较两个人最快的马 如果田忌的马更快 count 反之就用田忌的慢马
  • DS静态查找之顺序查找

    题目描述 给出一个队列和要查找的数值 找出数值在队列中的位置 队列位置从1开始 要求使用带哨兵的顺序查找算法 输入 第一行输入n 表示队列有n个数据 第二行输入n个数据 都是正整数 用空格隔开 第三行输入t 表示有t个要查找的数值 第四行起
  • IP地址判断有效性

    IP地址判断有效性 标签 空格分隔 OJ 算法 1 题目 判断输入的字符串是不是一个有效的IP地址 详细描述 请实现如下接口 boolisIPAddressValid constchar pszIPAddr 输入 pszIPAddr 字符串
  • DS二叉排序树之创建和插入

    题目描述 给出一个数据序列 建立二叉排序树 并实现插入功能 对二叉排序树进行中序遍历 可以得到有序的数据序列 输入 第一行输入t 表示有t个数据序列 第二行输入n 表示首个序列包含n个数据 第三行输入n个数据 都是自然数且互不相同 数据之间
  • 用指针交换两个数

    题目描述 利用指针交换用户输入的两个数 输入 测试次数t 共t行 每行两个整数 输出 共t行 每行输出交换后的两个整数 输入样例1 2 1 2 35 21 输出样例1 2 1 21 35 思路分析 用a和b两个变量把数存储下来 再用两个指针
  • ACM-Java输入输出基本操作

    一 Java之ACM注意点 1 类名称必须采用public class Main方式命名 2 在有些OJ系统上 即便是输出的末尾多了一个 程序可能会输出错误 所以在我看来好多OJ系统做的是非常之垃圾 3 有些OJ上的题目会直接将OI上的题目
  • 大数据量的冒泡排序 (计次数)

    题目描述 给定一个包含从0到n 1各一次的数组 若使用冒泡排序将其排为升序 问其中需要进行多少次交换 输入 测试数据有多组 每组由两行组成 第一行包含正整数n n lt 5000 下一行包含从0到n 1的n个整数的序列 输出 对于每组测试数

随机推荐

  • Spring Boot如何实现缓存的自动刷新

    Spring Boot如何实现缓存的自动刷新 在Web应用程序中 缓存是提高性能的重要手段之一 在Spring Boot应用程序中 我们可以使用Spring Cache来实现缓存功能 然而 当缓存的数据发生变化时 我们可能需要手动刷新缓存
  • html5 imports,html - HTML5 Imports not working - Stack Overflow

    The correct to do this is through server side pages includes or through JavaScript PHP example Welcome to my home page S
  • 在浏览器输入localhost:3000显示需要新应用打开此localhost原因

    今天做web应用开发时遇到在使用非谷歌浏览器时 输入localhost 3000 显示如下 显示需要新应用打开此localhost 实在是没办法显示出网页 经过反复尝试终于发现问题其实是现在使用非Chrome浏览器 在地址栏输入不带http
  • E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

    ubuntu apt 安装软件的时候 经常有这种错误 是由于依赖关系无法满足而引起的 比如我在安装pangolin的时候 提示 下列软件包有未满足的依赖关系 libxkbcommon dev 依赖 libxkbcommon0 0 8 0 1
  • vm安装Ubuntu 本机navicat连接Ubuntu MySQL

    先下载 虚拟机软件 VMware Workstation Pro 我下的16版 自己找密钥 打开VMware Workstation Pro 左侧右键鼠标 新建虚拟机 如图 选择典型 下一步 稍后安装系统 下一步 选择系统 我选 Linux
  • MVC知识整理

    MVC基础知识整理 ASP NETMVC框架 这里以MVC5为例 涉及到知识有 Model View Controller的使用 Area和Global的理解 路由配置 数据传递的方式 AOP思想的体现 4大过滤器 各种Result Raz
  • 台式计算机关闭屏幕快捷键,多种电脑屏幕关闭方法推荐

    有时因为需要节约电脑电量 有时因为为避免同事窥屏 有时由于顾及后台运行任务进程诸如听歌 电脑磁盘碎片整理等多种原因 这些均促使我们需要关闭电脑屏幕 无论基于何种原因促使我们关闭电脑屏幕 总的来说其并不容易操作 与台式机设置专门显示屏关机按键
  • H.264中的熵编码算法(主讲指数哥伦布编码)

    以下文章参考于殷文杰的博客 https yinwenjie blog csdn net article details 52301584 1 熵编码基本概念 1 熵 这一概念原本来自于化学和热力学 用于度量能量退化的指标 即熵越高 物体或系
  • HTTP 499 状态码 nginx下 499错误的解决办法

    HTTP 499 状态码 nginx下 499错误的解决办法 日志记录中HTTP状态码出现499错误有多种情况 比如nginx反代到一个永远打不开的后端 日志状态记录就会是499 发送字节数是0 经常有用户反馈网站系统时好时坏 因为线上的产
  • 【转】Robust regression(稳健回归)

    Robust regression 稳健回归 语法 b robustfit X y b robustfit X y wfun tune b robustfit X y wfun tune const b stats robustfit 描述
  • 在服务器上用conda创建新的python环境报错(PackagesNotFoundError)

    主要参考这篇博客 https blog csdn net weixin 43815222 article details 108549497 报错截图 prefix 后跟的是我的虚拟环境路径 home envs assignmaterial
  • 汉诺塔——递归的应用

    关于汉诺塔的原理 可看这里 点击打开链接 下面是源代码 include
  • SpringBoot参数校验--List类型

    我们在写后台接口的时候 通常会定义DTO来接收参数 在DTO中使用注解书写验证的规则 然后在Controller层使用 validated注解来验证自己制定的校验规则 但当我们的接口接收的参数为List
  • 面试题,说说你对spring IOC和AOP的理解

    在面试中 经常会问 说说你对spring IOC和AOP的理解 问题很宽泛 似乎不知道从何说起 回答思路 1 先用通俗易懂的话解释下何为IOC和AOP 2 各自的实现原理 3 自己的项目中如何使用 以下是个人的一些总结 仅供参考 1 IOC
  • java异常处理

    目录 异常概述与异常体系结构 常见异常2 数组下标越界异常 空指针异常 异常的运算 转换不兼容 异常处理机制一 异常处理机制二 手动抛出异常 用户自定义异常类 总结 异常概述与异常体系结构 在使用计算机语言进行项目开发的过程中 即使程序员把
  • 在winform中屏蔽双击最大化或最小化窗体(C#实现),禁用任务管理器结束程序

    在需要屏蔽双击窗体最大化 最小化 关闭 拖拽窗体中写入以下代码 可以根据需要取舍代码 protected override void WndProc ref Message m if m Msg 0x112 switch int m WPa
  • 数组方法对字符串使用时,需要注意的地方

    在平时工作或者练习的时候 我们有时会使用数组的方法去处理字符串 在使用时 我们可以发现有些方法可以对字符串使用 但是有一些不能 那么 这个规律究竟是什么 为什么有的可以使用 而有的不能使用 那些不能使用的原因是什么 分析思路 我们可以看到
  • 程序员到底要怎么找女朋友?

    漫小话碎碎念 新弄了个小专栏 以两三格漫画的形式给大家呈现一些只有程序猿才能看懂的梗 刚开始着手弄这个part 一切都还不太成熟 也欢迎大家在留言区提出一些建议 可以是一些梗 可以是形象整改 表达形式 都好 目前定在每周五发 毕竟工作了一周
  • windows驱动程序开发初探

    最近 由于需求推动 自己得开始学一下在windows下如何开发驱动程序 虽然 后来由于其他的原因使得学习没继续下去 但是我还是把一些粗略的学习经历与体会写在这里 方便自己日后卷土重来 也方便其他的对windows开发一窍不通的有志之士参考一
  • IP地址判断有效性

    IP地址判断有效性 标签 空格分隔 OJ 算法 1 题目 判断输入的字符串是不是一个有效的IP地址 详细描述 请实现如下接口 boolisIPAddressValid constchar pszIPAddr 输入 pszIPAddr 字符串