用C++程序写一个函数来判断某个子网掩码是否合法有效
时间: 2024-09-13 14:15:09 浏览: 90
在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'。如果这些条件都满足,那么子网掩码就是有效的。
阅读全文