C++ 判断一个IP地址是否正确的程序
时间: 2023-12-12 08:05:38 浏览: 74
可以使用正则表达式判断一个IP地址是否正确,以下是一个示例程序:
```c++
#include <iostream>
#include <regex>
using namespace std;
int main() {
string ip;
regex pattern("^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$");
cout << "请输入IP地址:";
cin >> ip;
if (regex_match(ip, pattern)) {
cout << "IP地址正确!" << endl;
} else {
cout << "IP地址不正确!" << endl;
}
return 0;
}
```
该程序使用了正则表达式 `^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$` 来匹配输入的IP地址,其中 `\d{1,3}` 表示匹配1到3位数字,`\.` 表示匹配点号。如果匹配成功,则判断IP地址正确。
相关问题
用C++程序写一个函数来判断某个子网掩码是否合法有效
在C++中编写一个函数来判断子网掩码是否合法有效,我们需要检查子网掩码是否由连续的1和0组成,并且1的数量在1到32之间(因为IP地址是32位的)。以下是一个简单的示例函数,用于检查给定的子网掩码字符串是否有效:
```cpp
#include <iostream>
#include <bitset>
#include <string>
bool isValidSubnetMask(const std::string& subnetMask) {
// 检查长度是否正确
if (subnetMask.length() > 32 || subnetMask.length() == 0) {
return false;
}
// 将子网掩码字符串转换为二进制表示
std::bitset<32> mask;
int bitCount = 0; // 记录连续1的数量
for (int i = 0; i < subnetMask.length(); ++i) {
if (subnetMask[i] != '1' && subnetMask[i] != '0') {
// 非法字符
return false;
} else if (subnetMask[i] == '1') {
// 连续1的数量增加
bitCount++;
} else {
// 1后面不能跟0
if (bitCount == 0) {
return false;
}
bitCount = 0; // 重置连续1的数量
}
}
// 检查最后的连续1数量是否合法
if (bitCount != 0 && bitCount < 32) {
return false;
}
return true;
}
int main() {
std::string subnetMask;
std::cout << "请输入子网掩码进行检查: ";
std::cin >> subnetMask;
if (isValidSubnetMask(subnetMask)) {
std::cout << "子网掩码是有效的。" << std::endl;
} else {
std::cout << "子网掩码是无效的。" << std::endl;
}
return 0;
}
```
在这个函数中,我们使用了`std::bitset<32>`来将子网掩码的每一位存储为一个二进制位。然后我们遍历这个字符串,确保所有的字符都是'1'或者'0'。我们还确保了在遇到'0'之前至少有一个'1',并且在最后一个'1'之后没有'0'。如果这些条件都满足,那么子网掩码就是有效的。
判断字符串是不是指定的IP类型,C++
可以使用正则表达式来判断一个字符串是否为指定的IP类型。下面是一个示例代码:
```c++
#include <iostream>
#include <regex>
using namespace std;
bool isIPv4(string str) {
regex pattern("^\\d{1,3}(\\.\\d{1,3}){3}$");
return regex_match(str, pattern);
}
bool isIPv6(string str) {
regex pattern("^[0-9a-fA-F]{1,4}(:[0-9a-fA-F]{1,4}){7}$");
return regex_match(str, pattern);
}
int main() {
string ip = "192.168.0.1";
if (isIPv4(ip)) {
cout << "IPv4 address" << endl;
} else if (isIPv6(ip)) {
cout << "IPv6 address" << endl;
} else {
cout << "Invalid IP address" << endl;
}
return 0;
}
```
该程序使用正则表达式来匹配IPv4和IPv6地址。`isIPv4`函数使用IPv4地址的正则表达式,`isIPv6`函数使用IPv6地址的正则表达式。如果字符串匹配成功,则返回`true`,否则返回`false`。在`main`函数中,我们输入一个IP地址并使用`if-else`语句来判断它是IPv4地址还是IPv6地址。
阅读全文