#P2815. IPv6地址压缩
IPv6地址压缩
Description
【IPv6 格式】
IPv6 二进位制下为 位长度,以 位为一组,每组以冒号“:”隔开,可以分为 组,每组以 位十六进制方式表示。
比如 2001:0db8:0000:0000:0123:4567:89ab:cdef 是一个合法的 IPv6 地址。
同时 IPv6 地址在某些条件下可以压缩:
- 每组数字代表的独立十六进制数可以省略前位的
0。
比如上面的 IPv6 地址可被压缩为 2001:db8:0:0:123:4567:89ab:cdef。
- 可以用双冒号
::表示一组0或多组连续的0,但只能出现一次。
比如上面的 IPv6 地址可被压缩为 2001:db8::123:4567:89ab:cdef。
请你帮助记忆力不好的网络工程师小明解决他遇到的问题。
【规则补充】
-
输入数据为完全展开的 IPv6 地址,确保输入的 IPv6 地址不含双冒号,每组地址省略的
0都会被补充上去。 -
双冒号只能使用一次,因此我们压缩最长的全
0组。
比如 2001:0db8:0000:0000:1:0000:0000:0000,压缩为 2001:db8:0:0:1::,而非 2001:db8::1:0:0:0。
- 双冒号只能使用一次,因此我们在我们遇到地址中多个连续全
0组长度相同时,我们压缩最前面的一个。
比如 2001:0db8:0000:0000:ffff:0000:0000:1,压缩为 2001:db8::ffff:0:0:1,而非 2001:db8:0:0:ffff::1。
- 输入的 IPv6 地址可能无法被压缩,此时请照原样输出。
提示:本题所示的压缩规则与 macOS (Darwin) 默认的 IPv6 地址显示方式相同,而 Windows 和 Linux 只遇到一组全 0 时不会使用 :: 进行压缩。但用此方法压缩过的 IPv6 地址一样可以被 Windows 和 Linux 正确识别。
比如 2001:0db8:ffff:0000:0123:4567:89ab:cdef,Darwin 压缩为 2001:db8:ffff::123:4567:89ab:cdef,而 Linux 和 Windows 压缩为 2001:db8:ffff:0:123:4567:89ab:cdef。
Input Format
一串 个字符的字符串,代表一个完全展开的 IPv6 地址。
Output Format
一串压缩后的 IPv6 地址。
2406:0840:f990:0000:0000:0000:0000:0001
2406:840:f990::1
2a13:1801:018a:00cf:0100:0000:0000:0000
2a13:1801:18a:cf:100::
2001:4860:4860:0000:0000:0000:0000:8888
2001:4860:4860::8888
2001:0db8:0000:0000:0000:0000:0000:0001
2001:db8::1
0000:0000:0000:0000:0000:0000:0000:0000
::
0000:0000:0000:0000:0000:0000:0000:0001
::1
2001:0db8:ffff:0000:0123:4567:89ab:cdef
2001:db8:ffff::123:4567:89ab:cdef
1234:5678:9abc:def0:1234:5678:9abc:def0
1234:5678:9abc:def0:1234:5678:9abc:def0
0001:0000:0000:0000:0000:0000:0000:0001
1::1
0000:0000:0000:0000:0000:0000:0001:0002
::1:2
京公网安备 11011102002149号