力扣468 验证IP地址

chatgpt/2023/9/24 1:13:48

在这里插入图片描述
ipv4地址:1.必须是四个非空子串
2.每个非空子串不含前导零
3.子串里字符只能是0~255
ipv6地址:1.必须是八个非空子串
2。每段非空串得长度是否在1~4之间,且不含0-9,a-f,A-F之外得字符。
3.同时0-9也不允许含前导零

class Solution {
public:string validIPAddress(string queryIP) {vector<string> ipv4;vector<string> ipv6;char v4='.';char v6=':';if(queryIP.size()==0) return "Neither";char c=queryIP[queryIP.size()-1];if(c==v4||c==v6) return "Neither";//如果地址字符串末尾是:or. 那肯定不是split(queryIP,ipv4,v4);split(queryIP,ipv6,v6);if(IsIPv4(ipv4)) return "IPv4";IsIPv6(ipv6);if(IsIPv6(ipv6)) return "IPv6";return "Neither";}
private:bool IsIPv4(vector<string> &ip){if(ip.size()!=4) return false;for(auto subip:ip){if(subip[0]=='0'&&subip.size()>1||subip.size()>3||subip.empty()) return false;//一定要判空subip.empty()不然底下stoi会报错for(char c:subip){if(c<'0'||c>'9') return false;//先判断每个是不是数字}int subipint=stoi(subip);if(subipint<0||subipint>255) return false;//再判断数字的范围}return true;}bool IsIPv6(vector<string> &ip){if(ip.size()!=8) return false;//首先是不是八个子串for(auto subip:ip){int len=subip.size();if(len<=0||len>=5) return false;//八个子串的长度是不是1~4for(int i=0;i<subip.size();i++){if(subip[i]<='f'&&subip[i]>='a'||subip[i]<='F'&&subip[i]>='A'||subip[i]<='9'&&subip[i]>='0') continue;else return false;// if(subip[i]<'0'||subip[i]>'9'&&subip[i]<'A'||subip[i]>'F'&&subip[i]<'a'||subip[i]>'f') return false;}}return true;}void split(string s,vector<string>&ip,char c){//    int flag=0,len=s.size();// if(s[len-1]==c) flag=1;//如果ip地址的最末尾是'.'或者是":",那肯定就不是ip地址s+=c;for(int i=0;i<s.size();i++){   int j=i;string item;while(s[j]!=c) item+=s[j++];i=j;ip.push_back(item);}}
};

答案 但是内存消耗不容乐观
其中出现的几个问题总结一一下,第一个是spilt函数截取字符串的问题。
ipv4:1.子字符串为4个,2.子字符串不为空,子字符串的长度不能大于3(即数字在1-3个之间),子字符串不含前导零 3.子字符串的每个字符必须是数字,4.子字符串在0~255之间(先使用stoi()转为int)
ipv6:1.子字符串为8个 2.子字符串的长度必须要在1-4之间(不能<1不能>5) 3.子字符串的字符必须在0-9,a-f,A-F之间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-5314914.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

C++11 bind function forward 用法详解

目录 std::bind std::function std::forward std::bind std::bind 是一个函数模板&#xff0c;定义在 <functional> 头文件中。它的作用是将一个可调用对象&#xff08;比如函数、函数指针、成员函数、成员函数指针等等&#xff09;以及若干个参数绑定到一个新的函数对…

HCIP-datacom-831题库

考取HCIP数通证书可以胜任中到大型企业网络工程师岗位&#xff0c;需要掌握中到大型网络的特点和通用技术&#xff0c;具备使用华为数通设备进行中到大型企业网络的规划设计、部署运维、故障定位的能力&#xff0c;并能针对网络应用设计出较高安全性、可用性和可靠性的解决方案…

Bootstrap框架(JavaScript组件)

目录 前言一&#xff0c;JavaScript插件简介二&#xff0c;插件的引入方式三&#xff0c;data属性四&#xff0c;关闭data属性五&#xff0c;过渡插件六&#xff0c;模态框6.1&#xff0c;JavaScript操作模态框6.2&#xff0c;模态框属性6.3&#xff0c;模态框方法6.4&#xff…

【excel技巧】excel文件批量提取文件名

Excel是大家经常用来制作表格的文件&#xff0c;比如输入文件名&#xff0c;如果有大量文件需要输入&#xff0c;用张贴复制或者手动输入的方式还是很费时间的&#xff0c;今天和大家分享如何批量提取文件名。 打开需要提取文件名的文件夹&#xff0c;选中所有文件&#xff0c…

zookeeper学习(三)基础数据结构

数据模型 在 zookeeper 中&#xff0c;可以说 zookeeper 中的所有存储的数据是由 znode 组成的&#xff0c;节点也称为 znode&#xff0c;并以 key/value 形式存储数据。 整体结构类似于 linux 文件系统的模式以树形结构存储。其中根路径以 / 开头。 进入 zookeeper 安装的 …

Neo4j文档阅读笔记-Installation and Launch Guide

安装&#xff08;Windows&#xff09; ①找到下载好的Neo4j Desktop文件&#xff0c;然后双击进行安装&#xff1b; ②安装Neo4j Desktop根据下一步进行安装。 启动 ①激活 打开Neo4j Desktop应用程序后&#xff0c;将激活码输入到“Activation Key”窗口中。 ②创建数据库…

easyui主表子表维护页面

easyui主表子表维护页面 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Title</title><!-- <#include "common.html"/> --><link rel"stylesheet" type&quo…

记一次 .NET 某物流API系统 CPU爆高分析

一&#xff1a;背景 1. 讲故事 前段时间有位朋友找到我&#xff0c;说他程序CPU直接被打满了&#xff0c;让我帮忙看下怎么回事&#xff0c;截图如下&#xff1a; 看了下是两个相同的程序&#xff0c;既然被打满了那就抓一个 dump 看看到底咋回事。 二&#xff1a;为什么会打…
推荐文章