C++ 判断字符串符合192.168.0.2~255.255.255.0类型
时间: 2024-05-10 14:19:27 浏览: 152
可以使用正则表达式来判断一个字符串是否符合IP地址的格式,代码如下:
```c++
#include <iostream>
#include <regex>
using namespace std;
bool is_valid_ip(string ip) {
regex pattern(
"^((([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}"
"(([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])))$");
return regex_match(ip, pattern);
}
bool is_valid_subnet_mask(string subnet_mask) {
regex pattern(
"^((255\\.){3}(0|128|192|224|240|248|252|254|255))$");
return regex_match(subnet_mask, pattern);
}
bool is_valid_ip_range(string start_ip, string end_ip, string subnet_mask) {
// 将IP地址和掩码转换成32位无符号整数
uint32_t start_ip_num = inet_addr(start_ip.c_str());
uint32_t end_ip_num = inet_addr(end_ip.c_str());
uint32_t subnet_mask_num = inet_addr(subnet_mask.c_str());
// 计算网络地址和广播地址
uint32_t network_addr = start_ip_num & subnet_mask_num;
uint32_t broadcast_addr = network_addr | ~subnet_mask_num;
// 判断起始IP地址和结束IP地址是否都在同一个子网
if ((start_ip_num & subnet_mask_num) != (end_ip_num & subnet_mask_num)) {
return false;
}
// 判断起始IP地址和结束IP地址是否在同一个子网的有效IP地址范围内
if (start_ip_num < network_addr || end_ip_num > broadcast_addr) {
return false;
}
return true;
}
int main() {
string start_ip = "192.168.0.2";
string end_ip = "192.168.0.255";
string subnet_mask = "255.255.255.0";
if (!is_valid_ip(start_ip) || !is_valid_ip(end_ip) || !is_valid_subnet_mask(subnet_mask)) {
cout << "Invalid input" << endl;
return 0;
}
if (is_valid_ip_range(start_ip, end_ip, subnet_mask)) {
cout << "Valid IP range" << endl;
} else {
cout << "Invalid IP range" << endl;
}
return 0;
}
```
上述代码使用了 C++11 引入的正则表达式库 `regex`,并且使用了 `inet_addr` 函数将 IP 地址和掩码转换成 32 位无符号整数,然后判断起始 IP 地址和结束 IP 地址是否在同一个子网的有效 IP 地址范围内。
阅读全文