21xrx.com
2024-12-22 22:07:46 Sunday
登录
文章检索 我的文章 写文章
C++如何判断一个字符串是否为合法的IP地址?
2023-07-05 07:02:35 深夜i     --     --
C++ 字符串 判断 合法IP地址

当你处理网络编程问题时,有时需要验证用户输入的IP地址是否合法。在C++中,我们可以使用正则表达式或字符串分隔来判断一个字符串是否为合法的IP地址。

1. 使用正则表达式

正则表达式是一种强大的模式匹配工具,可以用来查找、替换和验证字符串。正则表达式由一系列字符和特殊符号组成,可以匹配特定的字符串模式。在C++中,我们可以使用正则表达式库regex来验证IP地址是否合法。

以下是一个使用正则表达式来判断IP地址是否合法的示例代码:


#include <regex>

#include <iostream>

bool isValidIpAddress(const std::string& ipAddress) {

  std::regex regEx("^(?:[0-9]3\\.){3}[0-9]3$");

  return std::regex_match(ipAddress, regEx);

}

int main() {

  std::string ipAddress = "192.168.0.1";

  if (isValidIpAddress(ipAddress))

    std::cout << "valid IP address" << std::endl;

   else

    std::cout << "invalid IP address" << std::endl;

  

  return 0;

}

在上面的代码中,我们使用了一个正则表达式来匹配IP地址。这个正则表达式的意思是:“以1到3位数字开头,后面跟着一个点,重复三次,最后以1到3位数字结尾。”如果传入的IP地址与这个正则表达式匹配成功,就表示这个IP地址是合法的。

2. 使用字符串分隔

另一种验证IP地址是否合法的方法是使用字符串分隔。我们可以使用字符串流stringstream将IP地址按点号分隔开来,然后判断每一部分是否在0到255之间。

以下是一个使用字符串分隔来判断IP地址是否合法的示例代码:


#include <sstream>

#include <iostream>

#include <vector>

bool isValidIpAddress(const std::string& ipAddress) {

  std::vector<int> ipParts;

  std::stringstream ss(ipAddress);

  std::string part;

  int num;

  while (std::getline(ss, part, '.')) {

    std::stringstream partStream(part);

    if (!(partStream >> num))

      return false; // 部分不是纯数字

    

    if (num < 0 || num > 255)

      return false; // 部分超出了0到255的范围

    

    ipParts.push_back(num);

  }

  if (ipParts.size() != 4)

    return false; // IP地址部分数量不为4

  

  return true;

}

int main() {

  std::string ipAddress = "192.168.0.1";

  if (isValidIpAddress(ipAddress))

    std::cout << "valid IP address" << std::endl;

   else

    std::cout << "invalid IP address" << std::endl;

  

  return 0;

}

在上面的代码中,我们使用stringstream将IP地址按点号分隔开来,然后判断每一部分是否在0到255之间,如果不是纯数字或者有部分超出了范围,就表示这个IP地址不合法。

以上两种方法都可以用来判断IP地址是否合法,在实际使用中可以根据具体情况选择合适的方法。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复