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

leetcode:HJ18 识别有效的IP地址和掩码并进行分类统计[华为机考][字符串]

学习要点

  1. bitset<8>
  2. ostringstream
  3. stoi
  4. string.find
  5. string.substr

题目链接

        识别有效的IP地址和掩码并进行分类统计_牛客题霸_牛客网

题目描述

解法

#include <iostream>
#include <bits/stdc++.h>
#include <sstream>
#include <string>
#include <vector>
using namespace std;int main() {int A = 0;int B = 0;int C = 0;int D = 0;int E = 0;int W = 0;int P = 0;  string line_str;while (getline(cin, line_str)) {string ip;  string str1; string str2; string str3; string str4;string net;ip = line_str.substr(0, line_str.find('~'));net = line_str.substr(line_str.find('~') + 1);// 先检查ipint point1 = ip.find('.');int point2 = ip.find('.',point1+1);int point3 = ip.find('.',point2+1);if((point1 == 0) || ( point1+1 == point2) || (point2+1 == point3) || (point3 == ip.size() -1)){                   // 检查ip是否合法W++;continue;}str1 = ip.substr(0,point1);str2 = ip.substr(point1+1,point2-point1-1);if(str1 == "0" || str1 == "127"){                   // 检查是否是特殊地址continue;}// 再检查子网掩码int point_1 = net.find('.');int point_2 = net.find('.',point_1+1);int point_3 = net.find('.',point_2+1);if((point_1 == 0) || ( point_1+1 == point_2) || (point_2+1 == point_3) || (point_3 == net.size() -1)){       // 检查子网掩码是否合法---点号W++;continue;}int num1 = stoi(net.substr(0,point_1));int num2 = stoi(net.substr(point_1+1,point_2 - point_1 - 1));int num3 = stoi(net.substr(point_2+1,point_3 - point_2 - 1));int num4 = stoi(net.substr(point_3+1));ostringstream outstr;bitset<8> binary1(num1); bitset<8> binary2(num2); bitset<8> binary3(num3); bitset<8> binary4(num4); outstr << binary1 << binary2 << binary3 << binary4;string binary_net = outstr.str();int zero_pos = binary_net.find('0');if(zero_pos == string::npos || binary_net.find('1') == string::npos ) {       // 检查子网掩码是否合法---全为0或全为1W++;continue;}bool flag = false;for(int i = zero_pos+1; i<binary_net.size();i++){if(binary_net[i] == '1'){flag = true;}}if(flag){       // 检查子网掩码是否合法---连续1后连续0W++;continue;}// 至此全部合法且不为特殊地址if(str1 == "10" || (str1 == "172" && stoi(str2) >= 16 && stoi(str2)<= 31) || (str1 == "192" && str2 == "168")){P++;}if(stoi(str1) >= 1 && stoi(str1) <= 127){A++;continue;}if(stoi(str1) >= 128 && stoi(str1) <= 191){B++;continue;}if(stoi(str1) >= 192 && stoi(str1) <= 223){C++;continue;}if(stoi(str1) >= 224 && stoi(str1) <= 239){D++;continue;}if(stoi(str1) >= 240 && stoi(str1) <= 255){E++;continue;}}cout << A << ' ' << B << ' ' << C << ' ' << D << ' ' << E << ' ' << W << ' ' << P << endl;
}
http://www.xdnf.cn/news/1106947.html

相关文章:

  • 【Datawhale AI夏令营】mcp-server
  • [Python] Flask 多线程绘图时报错“main thread is not in main loop”的解决方案
  • 【unity实战】在Unity实现低耦合可复用的交互系统
  • 14. 请谈一下浏览器的强缓存和协商缓存
  • 基于大模型的鼻咽癌全周期预测及诊疗优化研究报告
  • YOLO家族内战!v5/v8/v10谁才是你的真命天子?(附保姆级选择指南)
  • 推荐系统-数据分割、性能验证
  • 开源 python 应用 开发(五)python opencv之目标检测
  • (LeetCode 面试经典 150 题 ) 209. 长度最小的子数组(双指针)
  • Vue.js:从 Web 到桌面的跨端实践与技术选型指南
  • 华为IPD(集成产品开发)流程是其研发管理的核心体系
  • pdf合并
  • 基于Java的Markdown到Word文档转换工具的实现
  • 解决‘vue‘ 不是内部或外部命令,也不是可运行的程序
  • css 判断是ios设备 是Safari浏览器
  • el-tree 懒加载 loadNode
  • 柯里化入门:拆拆拆,拆出函数式编程的优雅
  • OSPFv3-一二类LSA
  • Qt:QCustomPlot类介绍
  • Qt窗口:菜单栏
  • 【攻防实战】记一次DC2攻防实战
  • 华为 GaussDB :技术特性、应用局限与市场争议
  • Java使用Langchai4j接入AI大模型的简单使用(二)
  • windows电脑远程win系统服务器上的wsl2
  • OneCode 3.0架构升级:注解驱动与开放接口生态详解
  • 数据结构栈的实现(C语言)
  • 《Java Web程序设计》实验报告五 Java Script学习汇报
  • MS Azure Eventhub 发送 AD log 到cribl
  • 李宏毅(Deep Learning)--(三)
  • Raft 代码分析