编写C++函数:识别一段string字符串是IPv4还是IPv6

今天做到Calix(南京凯易迅)的笔试题,其中有一题大致意思是:vector中存有string字符串,识别每一个字符串是否是ip地址,三种可能:IPv4、IPv6、Neither,将每个字符串的识别结果依次存入一个vector中返回。 编写函数:vector checkIP(vector &ip_array{ } 如: 输入:
摘要由CSDN通过智能技术生成

今天做到Calix(南京凯易迅)的笔试题,其中有一题大致意思是:vector<string>中存有string字符串,识别每一个字符串是否是ip地址,三种可能:IPv4、IPv6、Neither,将每个字符串的识别结果依次存入一个vector<string>中返回。
编写函数:vector<string> checkIP(vector<string> &ip_array{ }
如:
输入:
This is not an ip_address!
192.168.1.1
0000: 0123: ff00: 00: ff: 0: 00ff: 1111
输出:
3
Neither
IPv4
IPv6

输入:
192.168.1.1
输出:
1
IPv4

思路如下
1)首先区分IPv4和IPv6,IPv4是通过4段32bits表示出来,每一段对应8bits,十进制范围为0~255,每一段用点”.”隔开;
IPv6是通过8段128bits表示出来的,每一段对应16bits,十六进制范围为0000~ffff,每一段用冒号”:”隔开。
2)根据段数可以确认可能是IPv4还是IPv6,但只是可能,因为每一段的表示都要进行合法性检测:如256.168.1.1就是不合法的表示,而gg00显然也不能表示十六进制数。那问题来了,如何进行ip_address的每一段检查呢,很遗憾C++标准库里面没有字符分割函数split(),只有我们可以自己创造了:代码如下

#include<iostream>
#include<vector>
#include<string>
using namespace std;

//***函数名:str_split
//***str:待分隔的字符串
//***sign:分隔符,如"."、":"等
//***results:将每一段存入results中,特别的当不存在sign时,str整体存入results中

void str_split(const string &str, const string &sign, vector<
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值