IP地址转换成整数

题目部分

题目 IP地址转换成整数
难度
题目说明 存在一种虚拟 IPv4 地址,由 4 小节组成,每节的范围为 0 ~ 255,以 # 号间隔,虚拟 IPv4 地址可以转换为一个 32 位的整数,例如: 128#0#255#255,转换为32位整数的结果为 2147549183(0x8000FFFF) 1#0#0#0,转换为 32 位整数的结果为 16777216(0x01000000) 现以字符串形式给出一个虚拟 IPv4 地址,限制第 1 小节的范围为 1 ~ 128,即每一节范围分别为(1~128)#(0~255)#(0~255)#(0~255),要求每个 IPv4 地址只能对应到唯一的整数上。如果是非法IPv4,返回invalid IP。
输入描述 输入一行,虚拟 IPv4 地址格式字符串。
输出描述 按照要求输出 IPv4 对应的整数,或 “invalid IP”。
补充说明 输入可能是非法的 IPv4 地址,需要对非法 IPv4(空串,还有 IP 地址中不存在的字符,非合法的 #,十进制整数不在合法区间内等)进行识别。
------------------------------------------------------
示例
示例1
输入 100#101#1#5
输出 1684340997
说明
示例2
输入 1#2#3
输出 invalid IP
说明


解读与分析

题目解读

输入一个字符串,把它转换成对应的整数;如果存在非法输入,则输出“invalid IP”。

分析与思路

此题思路比较简单:
1. 判断是否为非法输入。
2. 如果非法,输出 invalid IP。如果合法,以 “#” 为分隔符,分割成 4 个整数,第一个整数 * 256 * 256 * 256,加上第二个整数 * 256 * 256,加上第三个整数 * 256,加上第 4 个整数。输出最后的结果。


代码实现

Java代码

import java.util.Scanner;

/**
 * IPv4转换成整数
 * 
 * @since 2023.11.20
 * @version 0.1
 * @author Frank
 *
 */
public class IPv4Convert2Int {

    public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	while (sc.hasNext()) {
	    String input = sc.nextLine();
	    processIPv4Convert2Int(input);
	}

    }

    private static void processIPv4Convert2Int(String input) {
	String invalidIP = "invalid IP";
	if( input == null || input.length() == 0 )
	{
	    System.out.println(invalidIP);
	    return;
	}
	String[] ipSegments = input.split( "#" );
	if( ipSegments.length != 4 )
	{
	    System.out.println(invalidIP);
	    return;
	}
	
	int result = 0;
	for( int i = 0; i < ipSegments.length; i ++ )
	{
	    int tmpNum;
	    try {
		tmpNum = Integer.parseInt( ipSegments[i] );
	    }catch( NumberFormatException e)
	    {
		 System.out.println(invalidIP);
		 return;
	    }
	    if( i == 0 && ( tmpNum < 1 || tmpNum > 128 ))
	    {
		 System.out.println(invalidIP);
		 return;
	    }
	    if( i >= 1 && ( tmpNum < 0 || tmpNum > 255 ))
	    {
		 System.out.println(invalidIP);
		 return;
	    }
	    result = result * 256 + tmpNum;
	}
	System.out.println( result );
    }

}

JavaScript代码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function() {
    while (line = await readline()) {
        processIPv4Convert2Int(line);
    }
}();

function processIPv4Convert2Int( line ) {
    var invalidIP = "invalid IP";
    if( line == null || line.length == 0)
    {
        console.log( invalidIP );
        return;
    }
    var ipSegments = line.split("#");
    if( ipSegments.length != 4 )
    {
        console.log( invalidIP );
        return;
    }
    var result = 0;
    for( var i = 0; i < ipSegments.length; i ++ )
    {
        var tmpNum = parseInt( ipSegments[i] );
        if( isNaN( tmpNum ))
        {
            console.log( invalidIP );
            return;
        }
        if( i == 0 && ( tmpNum < 1 || tmpNum > 128 ))
        {
            console.log( invalidIP );
            return;
        }
        if( i >= 1 && ( tmpNum < 0 || tmpNum > 255 ))
        {
            console.log( invalidIP );
            return;
        }
        result = result * 256 + tmpNum;
    }
    console.log( result );
}

(完)

猜你喜欢

转载自blog.csdn.net/ZiJinShi/article/details/134511945
今日推荐