如何用C语言判断ip地址是不是合法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用C语言判断ip地址是不是合法相关的知识,希望对你有一定的参考价值。

可以试一下

#include <stdio.h>
 
int checkIP(const char* p)

  int n[4];
  char c[4];
  if (sscanf(p, "%d%c%d%c%d%c%d%c",
             &n[0], &c[0], &n[1], &c[1],
             &n[2], &c[2], &n[3], &c[3])
      == 7)
  
    int i;
    for(i = 0; i < 3; ++i)
      if (c[i] != \'.\')
        return 0;
    for(i = 0; i < 4; ++i)
      if (n[i] > 255 || n[i] < 0)
        return 0;
    return 1;
   else
    return 0;

 
int main()

  const char* x[] =
  
    "192.168.1.1",
    "10.0.0.1.",
    "127.256.0.1",
    "iugerjiogjioe",
    "172.16,0.1",
    0
  ;
  const char* m[] = 
  
    "不是合法的IP地址",
    "是合法的IP地址"
  ;
  int i = 0;
 
  while(x[i] != 0) 
    printf("%s %s\\n", x[i], m[checkIP(x[i])]);
    ++i;
  
  return 0;
参考技术A 回答

确定IP地址的合法步骤:1、首先了解IP地址是什么,IP地址分为A类、B类、C类、D类、E类。A类的IP地址范围是0.0.0-127.255.255.255,B类是128.0.0.0-191.255.255,C类是192.0.0.0-223.255.255.255。2. 然后判断身份证的长度。在a级IP地址中,网络标识的长度为8位,主机标识的长度为24位,子网掩码为255.0.0。B类适用于网络ID长度为16位、主机ID长度为16位、子网掩码为255.255.0.0的中型网络。C类适用于网络标识长度为24位、主机标识长度为8位、子网掩码为255.255.255.0的小型局域网。3. 最后,判断是否合法。在每个合法IP地址中,有四个以“.”分隔的3位数字,每个3位数字介于0和255之间,包括255。我相信经过学习,我们已经知道如何判断IP地址是否合法。IP地址:Internet协议地址,缩写为IP地址。IP地址是IP协议提供的统一地址格式。它为因特网上的每个网络和每个主机分配一个逻辑地址,以屏蔽物理地址的差异

判断一个字符串是不是一个合法的IP地址

最近在笔试的时候遇到碰一道算法题,

要求判断一个字符串是不是合法的ip地址。

将我的思路发出来分享一下,不一定正确,也不一定是最优的方法。希望能分享一些交流

要求用java或者c来实现,我的java代码:

 1 public class Test_ip {
 2     //程序入口
 3     public static void main(String[] args) {    
 4         Solution s = new Solution();    // 业务逻辑放在Solution类里面
 5         //String test_str = "12.34.56.67";
 6         String test_str = "256.34.56.67";    // 待解决的字符串
 7         boolean res = s.test_ip(test_str);    //调用判断方法
 8         System.out.println(res);    //输出结果
 9     }
10 }
11 
12 class Solution{
13     /**
14      * 判断一个字符串是否是一个合法的ip地址:
15      *    1 首先检查字符串的长度 最短应该是0.0.0.0 7位 最长 000.000.000.000 15位
16      *    2 尝试按.符号进行拆分     拆分结果应该是4段
17      *    3 查看拆分到的每一个子字符串,应该都是纯数字
18      *    4 对拆分结果转成整数 判断 应该是0到255之间的整数
19      *    5 经过各种磨砺之后 挺过来了!!!返回true
20      */
21     public boolean test_ip(String str){
22         // 1 首先检查字符串的长度 最短应该是0.0.0.0 7位 最长 000.000.000.000 15位
23         if(str.length()<7 || str.length() >15) return false;    // 如果长度不符合条件 返回false
24         
25         // 2 尝试按.符号进行拆分     拆分结果应该是4段
26         String[] arr = str.split("\\.");
27         if( arr.length != 4 )    return false;    //如果拆分结果不是4个字串 返回false
28         
29         // 3 查看拆分到的每一个子字符串,应该都是纯数字
30         for(int i = 0 ; i <4 ; i++ ){
31             for(int j = 0; j<arr[i].length();j++){
32                 char temp = arr[i].charAt(j);
33                 if(!( temp>‘0‘ && temp< ‘9‘ ) ) return false;    //如果某个字符不是数字就返回false
34             }
35         }
36         
37         // 4 对拆分结果转成整数 判断 应该是0到255之间的整数
38         for(int i = 0 ; i<4;i++){
39             int temp = Integer.parseInt( arr[i] );
40             if( temp<0 || temp >255)    return false;    //如果某个数字不是0到255之间的数 就返回false
41         }
42         
43         // 5 经过各种磨砺之后 挺过来了!!!返回true
44         return true;
45     }
46 }

 

以上是关于如何用C语言判断ip地址是不是合法的主要内容,如果未能解决你的问题,请参考以下文章

C语言 问题 C: IP地址的合法性检查?

用java语言 截取字符串中的Ip地址,并判断是不是合法,请问怎么做? 例“ip addess 192.160.2.3” 判断合法

判断一个字符串是不是一个合法的IP地址

怎样判断IP地址的非法性?

如何判断一个ip地址是否公网地址?

如何判断子网掩码是不是合法