某网络系统需要对输入的IP地址进行合法性判断。IP地址由四个十进制数字组成,每个数字的取值范围是0到255(包含0和255)。
IP地址的格式为X.X.X.X,其中X表示一个十进制数字。系统要求判断输入的IP地址是否合法,即满足以下条件:
1.IP地址由四个数字组成,用点号分隔。
2.每个数字的取值范围是0到255。
3.数字之间没有多余的前导零,例如01是非法的。
4.IP地址不能以点号开始或结束,例如.192.168.0.1和192.168.0.1.是非法的。
不合法的情况下输出"invalid",合法的情况下,你还需要判断是哪一类地址:
A类地址:地址范围从1.0.0.0到126.0.0.0
B类地址:地址范围从128.0.0.0到191.255.255.255
C类地址:范围从192.0.0.0到223.255.255.255
其它地址:合法输入,但是不是A、B、C类
请通过代码实现上述功能
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M
输入描述:
一行字符串,表示需要判断的IP地址
输出描述:
不合法的情况下,输出“invalid”
A类地址,输出“A_address"
B类地址,输出“B_address"
C类地址,输出“C_address"
其它地址,输出“other”
示例1
输入例子:
1.2.3.4
输出例子:
A_address
示例2
输入例子:
1.1.1.256a
输出例子:
invalid
示例3
输入例子:
192.168.0.1
输出例子:
C_address
解析:首先需要判断输入的IP地址是否合法,然后根据合法的IP地址判断其所属类别。
代码实现如下:
import java.util.Scanner;
public class IPAddress {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String ipAddress = scanner.nextLine();
System.out.println(checkIPAddress(ipAddress));
}
public static String checkIPAddress(String ipAddress) {
if (!isValidIPAddress(ipAddress)) {
return "invalid";
}
String[] nums = ipAddress.split("\\.");
int firstNum = Integer.parseInt(nums[0]);
if (firstNum >= 1 && firstNum <= 126) {
return "A_address";
} else if (firstNum >= 128 && firstNum <= 191) {
return "B_address";
} else if (firstNum >= 192 && firstNum <= 223) {
return "C_address";
} else {
return "other";
}
}
public static boolean isValidIPAddress(String ipAddress) {
if (ipAddress == null || ipAddress.length() < 7 || ipAddress.length() > 15) {
return false;
}
if (ipAddress.charAt(0) == '.' || ipAddress.charAt(ipAddress.length() - 1) == '.') {
return false;
}
String[] nums = ipAddress.split("\\.");
if (nums.length != 4) {
return false;
}
for (String num : nums) {
if (!isValidNum(num)) {
return false;
}
}
return true;
}
public static boolean isValidNum(String num) {
if (num == null || num.length() == 0) {
return false;
}
if (num.length() > 1 && num.charAt(0) == '0') {
return false;
}
try {
int n = Integer.parseInt(num);
if (n < 0 || n > 255) {
return false;
}
} catch (NumberFormatException e) {
return false;
}
return true;
}
}