編寫乙個函式來驗證輸入的字串是否是有效的 ipv4 或 ipv6 位址。
ipv4 位址由十進位制數和點來表示,每個位址包含4個十進位制數,其範圍為 0 - 255, 用(".")分割。比如,172.16.254.1;同時,ipv4 位址內的數不會以 0 開頭。比如,位址 172.16.254.01 是不合法的。
ipv6 位址由8組16進製制的數字來表示,每組表示 16 位元。這些組數字通過 (":")分割。比如, 2001:0db8:85a3:0000:0000:8a2e:0370:7334 是乙個有效的位址。而且,我們可以加入一些以 0 開頭的數字,字母可以使用大寫,也可以是小寫。所以, 2001:db8:85a3:0:0:8a2e:0370:7334 也是乙個有效的 ipv6 address位址 (即,忽略 0 開頭,忽略大小寫)。
然而,我們不能因為某個組的值為 0,而使用乙個空的組,以至於出現 (:? 的情況。 比如, 2001:0db8:85a3::8a2e:0370:7334 是無效的 ipv6 位址。同時,在 ipv6 位址中,多餘的 0 也是不被允許的。比如, 02001:0db8:85a3:0000:0000:8a2e:0370:7334 是無效的。
說明: 你可以認為給定的字串裡沒有空格或者其他特殊字元。
示例 1: 首先要判斷是不是ipv4和ipv6。再判斷前,先split,這樣有利於求解。輸入: 「172.16.254.1」
輸出: 「ipv4」
解釋: 這是乙個有效的 ipv4 位址, 所以返回 「ipv4」。
示例 2:
輸入: 「2001:0db8:85a3:0:0:8a2e:0370:7334」
輸出: 「ipv6」
解釋: 這是乙個有效的 ipv6 位址, 所以返回 「ipv6」。
示例 3:
輸入: 「256.256.256.256」
輸出: 「neither」
解釋: 這個位址既不是 ipv4 也不是 ipv6 位址。
(1)對於ipv4來說,其split後應該是4段,每段大小為1-3,對於首位是0的判斷,然後再判斷其大小
(2)對於ipv6來說,其split後應該是8段,每段大小為1-4,判斷是否有出現00xx的情況,然後再判斷每一位是否在16進製表示範圍之內。
【注意】這道題,是leetcode裡為數不多的爛題,首先按照題意ipv6**現0000是通不過的,但是判斷的時候能通過。另外要注意分解的時候,最後一位為』.』 或者 ':'的情況。
class
solution
else}if
(start < str.
size()
) res.
emplace_back
(str.
substr
(start, len));
return res;
}bool
isipv4
(vector
& ip)
int num =
stoi
(str);if
(num <
0|| num>
255)
return
false;}
}else
return
true;}
bool
isipv6
(vector
& ip)}}
else
return
true;}
string validipaddress
(string ip)
};
468 驗證IP位址
編寫乙個函式來驗證輸入的字串是否是有效的 ipv4 或 ipv6 位址。ipv4位址由十進位制數和點來表示,每個位址包含4個十進位制數,其範圍為 0 255,用 分割。比如,172.16.254.1 同時,ipv4 位址內的數不會以 0 開頭。比如,位址172.16.254.01是不合法的。ipv6...
468 驗證IP位址
編寫乙個函式來驗證輸入的字串是否是有效的 ipv4 或 ipv6 位址。ipv4 位址由十進位制數和點來表示,每個位址包含4個十進位制數,其範圍為 0 255,用 分割。比如,172.16.254.1 同時,ipv4 位址內的數不會以 0 開頭。比如,位址 172.16.254.01 是不合法的。i...
468 驗證IP位址
題目描述 編寫乙個函式來驗證輸入的字串是否是有效的 ipv4 或 ipv6 位址。如果是有效的 ipv4 位址,返回 ipv4 如果是有效的 ipv6 位址,返回 ipv6 如果不是上述型別的 ip 位址,返回 neither ipv4 位址由十進位制數和點來表示,每個位址包含 4 個十進位制數,其...