前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OJ刷题记录:L1-203-IP地址(10分)

OJ刷题记录:L1-203-IP地址(10分)

作者头像
英雄爱吃土豆片
发布2020-10-29 10:51:41
3300
发布2020-10-29 10:51:41
举报
文章被收录于专栏:英雄爱吃土豆片

L1-203-IP地址(10分)

题目要求: 编写一个函数判断一个字符串是IPv4地址还是IPv6地址或者两者都不是。 IPv4地址以十进制格式表示,它由四个十进制数组成,每个数字范围从0到255,以点(“.”)分隔,例如127.0.0.1; IPv6地址以十六进制格式表示,它由八个四位的十六进制数组成,以冒号(“:”)分隔,例如: 2000:08db:85a3:0020:0000:8a2e:0370:7334就是合法的 IPv6地址。 我们可以省略一些前导零或者把字母以大写字母表示,所以2000:08DB:85A3:0020:0:8A2E:0370:7334也是合法的IPv6地址。 输入 输入一个地址 输出 如果是IPv4地址,则输出IPv4,如果是IPv6地址则输出IPv6,都不是的话输出Neither 样例输入 172.16.254.1 样例输出 IPv4

解题思路: 字符串操作,将 IP 地址的每一个部分找出并加以判断即可,写两个函数分别判 IPv4 和 IPv6。

需要注意: 题目中的可以省略一些前导零,意思是如果 IPv6 中有一个部分为 0000,那么我们可以把她写作 0。否则 IPv6 地址的每一个部分都必须是 4 位的十进制数。

通关代码:

代码语言:javascript
复制
#include <iostream>
#include <string>

using namespace std;

bool isIpv4(string str) {
	int n = 0;
	string value;
	string::iterator p = str.begin();
	string::iterator END = str.end();
	
	for (; p != END; p++) {
		value += *p;
		if (*p == '.' || (*p <= '9' && *p >= '0')) {
			if (*p == '.' || p == END - 1) {
				n++;
				if (atoi(value.c_str()) < 0 || atoi(value.c_str()) > 255) {
					return false;
				}
				value = "";
			}
		} else {
			return false;
		}
	}

	if (n != 4) {
		return false;
	}
	
	return true;
}

bool isIpv6(string str) {
	int n = 0;
	string value;
	string::iterator p = str.begin();
	string::iterator END = str.end();
	
	for (; p != END; p++) {
		value += *p;
		if (*p == ':' || (*p >= '0' && *p <= '9') || (*p >= 'a' && *p <= 'z') || (*p >= 'A' && *p <= 'Z')) {
			if (*p == ':') {
				n++;
				value.pop_back();
				if (value.size() != 4 && value != "0") {
					return false;
				}
				value = "";
			} else if (p == END - 1) {
				n++;
				if (value.size() != 4 && value != "0") {
					return false;
				}
			}
				
		} else {
			return false;
		}
	}
	
	if (n != 8) {
		return false;
	}
	
	return true;
}

int main() {
	string str;
	
	cin >> str;
	
	if (isIpv4(str)) {
		cout << "IPv4";
	} else if (isIpv6(str)) {
		cout << "IPv6";
	} else {
		cout << "Neither";
	}
	
	return 0;
}

通关截图:

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • L1-203-IP地址(10分)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档