真的这道题写吐了我

class Solution {
  public:
    /**
     * 验证IP地址
     * @param IP string字符串 一个IP地址字符串
     * @return string字符串
     */
    string solve(string IP) {
      if (IP.empty()) {
        return "Neither";
      }
      
      split(IP);
      
      if (is_ipv4()) {
        return "IPv4";
      } else if (is_ipv6()) {
        return "IPv6";
      } else {
        return "Neither";
      }
    }
  
  private:
    void split(const std::string &s) {
      int i = 0;
      std::string tmp;
      
      while (i < s.size()) {
        int j = i;
        while (j < s.size() && std::isalnum(s[j])) {
          tmp += s[j];
          ++j;
        }
        res.push_back(tmp);
        tmp.clear();
        i = j + 1;
        //  末尾分隔符  或者连续的分隔符
        if (s[i] == ':' || s[i] == '.' || i == s.size() && !std::isalnum(s[j])) {
          res.push_back("-1");
          ++i;
        }
      }
    }
  
    bool is_ipv4() {
      if (res.size() != 4) {
        return false;
      }
      
      for (int i = 0; i < res.size(); ++i) {
        //  位数限制
        if (res[i].empty() || res[i].size() > 3) {
          return false;
        }
        
        //  内容限制
        for (int j = 0; j < res[i].size(); ++j) {
          if (!std::isdigit(res[i][j]) || res[i][0] == '0' && res[i].size() != 1) {
            return false;
          }
        }
        
        //  大小限制
        if (std::stoi(res[i]) < 0 || std::stoi(res[i]) >255) {
          return false;
        }
      }
      
      return true;
    }
  
    bool is_ipv6() {
      if (res.size() != 8) {
        return false;
      }
      
      for (int i = 0; i < res.size(); ++i) {
        //  位数限制
        if (res[i].empty() || res[i].size() > 4) {
          return false;
        }
        
        //  大小限制
        for (int j = 0; j < res[i].size(); ++j) {
          if (!(std::isdigit(res[i][j]) || res[i][j] <= 'f' && res[i][j] >= 'a' || res[i][j] >= 'A' && res[i][j] <= 'F')) {
            return false;
          }
        }
      }
      
      return true;
    }
  private:
    std::vector<std::string> res;
};