21xrx.com
2025-04-11 05:19:07 Friday
文章检索 我的文章 写文章
如何用c++判断一个字符串是否是IPv4地址
2023-07-10 15:15:44 深夜i     29     0
C++ 判断 字符串 IPv4地址 编程

在网络编程中,IP地址是最基础、最重要的概念之一。在IPv4中,一个IP地址由四个十进制数(即四个字节)组成,每个数的取值范围是0~255,用小数点(.)分隔。例如,192.168.0.1就是一个IPv4地址。

在C++中,如何判断一个字符串是不是IPv4地址呢?下面就介绍一种简单易懂的方法。

1. 使用字符串流(stringstream)将字符串转化为整数类型,判断每个整数是否在0~255之间。

2. 使用字符串流将字符串分割成四个部分,并分别判断每个部分是否为合法的整数。

3. 使用正则表达式判断字符串是否符合IPv4地址的格式。

我们来看一下具体的实现过程:

#include <iostream>
#include <sstream>
using namespace std;
bool isIPv4(string str)
{
  istringstream ss(str);  // 使用字符串流将字符串转化为整数
  int num;
  for (int i = 0; i < 4; i++) {
    if (!getline(ss, str, '.') || str.empty()) // 字符串分割出错,或者分割出来的字符串为空
      return false;
    if (str.size() > 1 && str[0] == '0'// 数字不能以0开头
      return false;
    for (char c : str) { // 判断每个字符是否为数字
      if (!isdigit(c))
        return false;
    }
    num = stoi(str); // 将字符串转为整数
    if (num < 0 || num > 255// 判断整数是否在0~255之间
      return false;
  }
  if (getline(ss, str, '.')) // 不应该还有分隔符
    return false;
  return true;
}
int main()
{
  string str1 = "192.168.1.10";
  string str2 = "0.0.0.0";
  string str3 = "255.255.255.255";
  string str4 = "192.168.258.1"// 错误的IP地址,最后一部分应该小于等于255
  cout << isIPv4(str1) << endl; // 输出1,表示正确的IPv4地址
  cout << isIPv4(str2) << endl; // 输出1,表示正确的IPv4地址
  cout << isIPv4(str3) << endl; // 输出1,表示正确的IPv4地址
  cout << isIPv4(str4) << endl; // 输出0,表示错误的IPv4地址
  return 0;
}

以上代码中,用到了stringstream将字符串按照分隔符(即“.”)进行分解,然后再将字符串转化为整数类型进行判断。若是不符合IPv4地址规范,则返回false。

此外,还可以使用正则表达式进行判断。IPAddress正则表达式为"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$"

以上就是判断IPv4地址的方法,C++中还有其他判断IPv4地址的方法,但这种方法相对来说比较简单易懂。如果你在网络编程中需要用到IPv4地址的判断,可以尝试用这种方法进行实现。

  
  

评论区