程式語言 - LeetCode - C++ - 468. Validate IP Address



題目:


解答:

class Solution {
public:
    string validIPAddress(string queryIP) {
        int cnt = 0;
        string s;
        stringstream ss(queryIP);
        const string nei = "Neither";

        if (count(queryIP.begin(), queryIP.end(), '.') == 3) {
            while (getline(ss, s, '.')) {
                if (++cnt > 4) {
                    return nei;
                }

                if (s.empty() || s.size() > 1 && s[0] == '0' || s.size() > 3) {
                    return nei;
                }

                for (char c : s) {
                    if (!isdigit(c)) {
                        return nei;
                    }
                }

                int n = stoi(s);
                if (n < 0 || n > 255) {
                    return nei;
                }
            }

            return cnt == 4 ? "IPv4" : nei;
        }

        if (count(queryIP.begin(), queryIP.end(), ':') == 7) {
            while (getline(ss, s, ':')) {
                if (++cnt > 8) {
                    return nei;
                }

                if (s.empty() || s.size() > 4) {
                    return nei;
                }

                for (char c : s) {
                    if (!isxdigit(c)) {
                        return nei;
                    }
                }
            }

            return cnt == 8 ? "IPv6" : nei;
        }

        return nei;
    }
};