处理字符串:

IPv6的错误形式可能有如下:

  • 多了首位0
  • 出现 ::
  • 字符不在0-9 a-f A-F之间

IPv4错误形式可能有如下:

  • 多了首位'0'

  • 超过0-255范围

  • 出现的 ..

    class Solution {
    public:
      /**
       * 验证IP地址
       * @param IP string字符串 一个IP地址字符串
       * @return string字符串
       */
      bool type(string &s) {
          for (auto & c : s) {
              if (c == ':') return false;
              if (c == '.') return true;
          }
          return false;
      }
    
      bool checkIPv6(string &s) {
          int ch_cnt = 0;
          for (int i = 0; i < s.size(); i++) {
              if (s[i] == ':') {
                  if (ch_cnt > 4 || ch_cnt == 0) return false; //多余的字符 或 空
                  ch_cnt = 0;
              }
              else if (!( s[i] <= '9' && s[i] >= '0' || s[i] <= 'f' && s[i] >= 'a' || s[i] <= 'F' && s[i] >= 'A')) {
                  return false;
              }
              else ch_cnt++;
          }
          return true;
      };
    
      bool checkIPv4(string &s) {
          int k = 0;
          s.push_back('.');
          for (int i = 0; i < s.size(); i++) {
              if (s[i] == '.') {
                  s[i] = '\0';
                  int num = atoi(&s[k]);
                  if (s[k] == '\0' || (s[k] == '0' && num != 0) || !(num < 256 && num > -1) ) {
                      return false;
                  }
                  k = i + 1;
              }
          }
          return true;
      }
    
      string solve(string IP) {
          // write code here
          if (type(IP)) {
              if (checkIPv4(IP)) return "IPv4";
          }
          else {
              if (checkIPv6(IP)) return "IPv6";
          }
          return "Neither";
      }
    };