精华内容
下载资源
问答
  • 题目:判断输入的字符串是不是一个有效的IP地址 详细描述: 请实现如下接口  boolisIPAddressValid(constchar* pszIPAddr)  输入:pszIPAddr 字符串  输出:true 有效的IP地址,false,无效的IP地址 ...

    题目:判断输入的字符串是不是一个有效的IP地址

    详细描述:

    请实现如下接口 
    boolisIPAddressValid(constchar* pszIPAddr) 
    输入:pszIPAddr 字符串 
    输出:true 有效的IP地址,false,无效的IP地址

    约束

    输入IP为XXX.XXX.XXX.XXX格式 
    字符串两端含有空格认为是合法IP 
    字符串中间含有空格认为是不合法IP 
    类似于 01.1.1.1, 1.02.3.4 IP子段以0开头为不合法IP 
    子段为单个0 认为是合法IP,0.0.0.0也算合法IP

    我的个人理解:

    //检查IP地址的有效性
    int ipCheck(char *ip)
    {
    int i = 0, j = 0, subIP[4], preFlag = -1; 
    subIP[0] = subIP[1] = subIP[2] = subIP[3] = -1;

    for (; i < strlen(ip); i++)
    {
    //符号判断
    if ((ip[i] > '9' || ip[i] < '0') && ip[i] != '.')
    {
    return -1;
    }



    //第一位字符判断
    if (i == 0 && (ip[i] == '0' || ip[i] == '.'))
    {
    return -2;
    }
    //获取分段
    if ('.' == ip[i])
    {
    //防止1..1的情况
    if (i == (preFlag+1))
    {
    return -3;
    }
    else
    {
    char acIP[4] = {0,};
    memcpy(acIP, ip+preFlag+1, i-preFlag-1);
    preFlag = i;
    subIP[j++] = atoi(acIP);
    //最后一段
    if (j == 3)
    {
    memset(acIP, 0, sizeof acIP);
    memcpy(acIP, ip+preFlag+1, strlen(ip)-preFlag-1);
    subIP[j] = atoi(acIP);
    break;
    }
    }
    }
    }

    //判断值
    for (i  = 0; i < 4; i++)
    {
    if (subIP[i] < 0 || subIP[i] > 255)
    {
    return -4;
    }
    }

    return 0;
    }

    代码实现:

    #include<stdio.h>
    #include<string.h>
    #include<memory.h>
    int main()
    {
            char ip[20];
            printf("请输入一个ip地址:\n")
            gets(ip);
            int i=0,j=0;
            char subIP[4];
            int preFlag=-1;
            char acIP[4]={0,};
            subIP[0]=subIP[1]=subIP[2]=subIP[3]=-1;
            for(;i<strlen(ip);i++)
            {
              // 符号判断
               if((ip[i] > '9' || ip[i] < '0') && ip[i] != '.')
               {
                    printf("false1111\n");
                    return 0;
                }
             //第一位字符判断
            if(i==0 && (ip[i]=='0' || ip[i]=='.'))
             {
                    printf("false2\n");
                    return 0;
             }
             //获取分段
              if('.'==ip[i])
              {
                    //防止1..1的情况
                    if(i==(preFlag+1))
                    {
                       printf("false3\n");

                  }
                    else
                    {
                    //  char acIP[4]={0,};
                       memcpy(acIP,ip+preFlag+1,i-preFlag-1);
                          preFlag=i;
                       subIP[j++]=atoi(acIP);


                      //最后一段


                            if(j==3)
                            {
                             memset(acIP,0,sizeof(acIP));
                            memcpy(acIP,ip+preFlag+1,strlen(ip)-preFlag-1);
                             subIP[j]=atoi(acIP);
                            printf("%s\n",subIP);
                             printf("the ip is true\n");
                             return 0;
                             }


                    }


              }


            }
            for(i=0;i<4;i++)
            {
                if(subIP[i]<0 || subIP[i] > 255)
                {
                    printf("false 44");
                    return 0;
                }
            }
    }

    执行结果:

    liuzj@ET302Buildver:~/zhanghong$ ./a.out 
    192.168.1.10
    the ip is true
    liuzj@ET302Buildver:~/zhanghong$ 


                                                          
                                                                 





















    展开全文
  • 如何判断IP地址是否合法

    千次阅读 2017-09-22 09:53:15
    如何判断一个IP地址是否合法,以及如何判断一个IP地址是否在给定的IP地址范围内,废话不多说,上代码 判断IP地址是否合法: bool isValidIP(char *ip) { if (ip == NULL) return false; char temp[4];...
    如何判断一个IP地址是否合法,以及如何判断一个IP地址是否在给定的IP地址范围内,废话不多说,上代码
    


    判断IP地址是否合法:

    bool isValidIP(char *ip)
    {
    	if (ip == NULL)
    		return false;
    	char temp[4];
    	int count = 0;
    	while (true)
    	{
    		int index = 0;
    		while (*ip != '\0' && *ip != '.' && count < 4)
    		{
    			temp[index++] = *ip;
    			ip++;
    		}
    		if (index == 4)
    			return false;
    		temp[index] = '\0';
    		int num = atoi(temp);
    		if (!(num >= 0 && num <= 255))
    			return false;
    		count++;
    		if (*ip == '\0')
    		{
    			if (count == 4)
    				return true;
    			else
    				return false;
    		}
    		else
    			ip++;
    	}
    }




    判断一个IP地址是否在给定的IP地址范围内:

    bool IsIpInner(string strDesIp, string strBegin, string strEnd)
    {
    	char* tempDesIp = const_cast<char*>(strDesIp.c_str());
    	char* tempBegin = const_cast<char*>(strBegin.c_str());
    	char* tempEnd = const_cast<char*>(strEnd.c_str());
    	if (isValidIP(tempDesIp) && isValidIP(tempBegin) && isValidIP(tempEnd))
    	{
    		unsigned long lDesIp = GetIpInt(strDesIp);
    		unsigned long lBegin = GetIpInt(strBegin);;
    		unsigned long lEnd = GetIpInt(strEnd);;
    		return (((lDesIp >= lBegin) && (lDesIp <= lEnd)) || ((lDesIp <= lBegin) && (lDesIp >= lEnd)));
    	}
    	else
    		return false;
    }

    其中GetIpInt(string strIp)是将IP地址转化为可比较大小的整形数,如下:

    unsigned long GetIpInt(string strIp)
    {
    	char* tempIp = const_cast<char*>(strIp.c_str());
    	char *next_token = NULL;
    	char* ch1 = strtok_s(tempIp, ".", &next_token);
    	char* ch2 = strtok_s(NULL, ".", &next_token);
    	char* ch3 = strtok_s(NULL, ".", &next_token);
    	char* ch4 = strtok_s(NULL, ".", &next_token);
    	unsigned long a = stoi(ch1);
    	unsigned long b = stoi(ch2);
    	unsigned long c = stoi(ch3);
    	unsigned long d = stoi(ch4);
    	return a * 255 * 255 * 255 + b * 255 * 255 + c * 255 + d;
    }


    展开全文
  • 如何判断一个字符串是否合法IP地址。 import java.util.Scanner; public class MyTest { public static void main(String[] args) { /* * 如何判断一个字符串是否合法IP地址。 */ Scanner sc=...

    如何判断一个字符串是否为合法的IP地址。

    import java.util.Scanner;
    
    public class MyTest {
    
    	public static void main(String[] args) {
    		/*
    		 * 如何判断一个字符串是否为合法的IP地址。
    		 */
    		Scanner sc=new Scanner(System.in);
    		String test=sc.nextLine();
    		
    		// ip地址最短7位最长15位
    		if (test.length() < 7 || test.length() > 15) {
    			System.out.println("不合法,长度不对");
    		} else {
    			String[] TheFigures = test.split("\\.");
    			if (TheFigures.length!= 4) {
    				
    				System.out.println("不合法,不是4个串-------"+TheFigures.length);
    			} else {
    				//对每个字符串进行判断是否是规定的数字
    				boolean flag=true;//定义一个标志位
    				long sum=0;
    				for(int i=0;i<TheFigures.length;i++) {
    					
    					
    					char [] cr=TheFigures[i].toCharArray();
    					//遍历每个串里的字符
    					for (char chr:cr) {
    						char ling='0';
    						int ch=chr-ling;
    						if(ch<0 | ch>9) {
    							flag=false;
    							
    							System.out.println("不合法,有非数字---ASCII值为"+ch+"字符是"+chr);
    							break;
    						}
    					}
    					sum=sum+Integer.parseInt(TheFigures[i]);
    					if(flag) {
    						int figInt=Integer.parseInt(TheFigures[i]);
    						if(figInt<0  || figInt>255) {
    							flag=false;
    							break;
    						}
    					}
    				}
    				if(flag && sum!=0 ) {
    					System.out.println("合法啦!");
    				}else {
    					System.out.println("不合法!");
    				}
    				
    				
    				
    				
    				
    				
    			}
    		}
    
    	}
    
    }
    
    
    展开全文
  • 如何判断一个字符串是否合法IP地址。 要求: 1. 不能使用正则表达式和自带的库函数。 2. 列出全部测试用例,并给出原因。

    题目:

    如何判断一个字符串是否为合法的IP地址。
    要求:

    • 不能使用正则表达式和自带的库函数。

    C++源码如下:

    #include<iostream>
    #include<stdlib.h>
    #include<string.h>
    using namespace std;
    
    bool ip_add_res(const char* ip_val)
    {
    	int point_num = 0;
    	int point_pos [10]= {0};
    	int len = strlen(ip_val);
    	int sum;
    
    	int i =  0;
    	while(i < len)
    	{
    		if(ip_val[i] == '.')
    		{
    			point_pos[point_num] = i;
    			point_num++;
    		}
    		i++;
    	}
    	if(point_num != 3)
    	{
    		return false;
    	}
    
    	i = 0;
    	int  pos = point_pos[0];
    	int temp;
    	for(int j = 0; j <= point_num; j++)
    	{
    		if(j == 0)
    		{
    				temp = point_pos[0]+1;
    		}
    		else if(j < 3)
    		{
    			temp = point_pos[j] - pos;
    		}
    		else if(j == 3)
    		{
    			temp = len - point_pos[point_num - 1];
    		}
    		
    		switch(temp-1)
    		{
    			case 1:
    				{
    					if( j == 3)
    						sum = (int)(ip_val[len-1] - 48);
    					else
    						sum = (int)(ip_val[point_pos[j]-1] - 48);
    					if(sum < 0 || sum > 9)
    						return false;
    					break; 
    				} 
    				case 2:
    				{
    					if( j == 3)
    						sum = (int)(ip_val[len-1] - 48) + 10*(int)(ip_val[len-2] - 48);
    					else
    						sum = (int)(ip_val[point_pos[j]-1] - 48) + 10*(int)(ip_val[point_pos[j]-2] - 48);
    					if(sum < 0 || sum > 99)
    						return false;
    					break;
    				}
    				case 3:
    				{
    					if( j == 3)
    						sum = (int)(ip_val[len-1] - 48) + 10*(int)(ip_val[len-2] - 48) + 100*(ip_val[len-3] - 48);
    					else
    						sum = (int)(ip_val[point_pos[j]-1] - 48) + 10*(int)(ip_val[point_pos[j]-2] - 48) + 100*(ip_val[point_pos[j]-3] - 48);
    					if(sum < 0 || sum > 255)
    						return false;
    					break;
    				}
    			default:
    				return false;
    		}
    
    		if(j <= 2)
    			pos = point_pos[j];
    	}
    }
    
    int main()
    {
    	char *ip = "127.0.0.1";
    	bool res;
    	res = ip_add_res(ip);
    	
    	if(res)
    		cout << "The res true!" << endl;
    	else
    	{
    		cout << "The res false!" << endl;
    	}
    	
    	return 0;
    }
    

    因为题目要求不能使用库函数,因此只能使用这种方法逐个字符分析处理,程序粗制滥造,bug很多,仅用于提供思路和简单的方法,希望能够帮助需要的人

    展开全文
  • 最近在项目中突然遇到了主题的这问题,当时匆匆想,好像觉得还挺简单的吧?结果代码写,发现还真的听过case需要考虑的呀! 改天抽空把测试代码共享出来。。。未完待续。。。 ...
  • 利用函数:inet_addr unsigned long inet_addr( ... MessageBox("IP地址错误,请重新设置");  }   *******************************************************************    
  • 1.输入一个IP地址字符串(支持16进制和10进制),判断ip是否合法,例如ip为“192.1.0.1”返回ture,ip为“266.266.266.1”,返回false。 程序思路 1、要把ip地址分隔开,当然是用“.”分割。 2、ip地址有十进制和16...
  • 互联网上的每台计算机都有...现在用户输入一个字符串(不含有空格)判断是否合法。 import os,sys a=input() def check_ip(ip): import sys sc=ip.strip().split('.') if len(sc)!= 4: print( "check ip addr
  • 算法-判断一个字符串是否ip地址?

    千次阅读 2018-07-16 09:53:19
    如何判断一个IP是否合法的IP,如输入:192.168.1.0,输出:合法;输入192.168.1.1222,输出:非法。 首先明确IP的格式:(1~255).(0~255).(0~255).(0~255) 下面使用两种不同的方式进行验证:方案一为字符串处理,...
  • 判断个IP地址是否在同一个网段中 判断两个IP地址的大小关系 知识准备 IP协议 子网掩码 Java 正则表达式 基本原理 IP地址范围 0.0.0.0~255.255.255.255,包括了...
  • 判断IP地址合法性(Java)

    万次阅读 2016-09-30 13:03:43
    0.前言有时候我们要对用户输入的IP地址进行校验,判断个IP地址是不是一个合法的IP地址。 1.实现思路最简单的实现方法是构造一个正则表达式。判断用户的输入与正则表达式是否匹配。若匹配则是正确的IP地址,否则...
  • php如何判断IP为有效IP地址

    千次阅读 2013-05-31 14:36:53
    多数人看到这篇日志,第印象肯定是以为是...判断是否合法IP(经本人验证,该方法不太好用便直接只验证IPV4地址) (show/hide)plain text if(filter_var($ip, FILTER_VALIDATE_IP)) {  // it's va
  • 多数人看到这篇日志,第印象肯定是以为是要讲如何通过正则表达式来判断。...判断是否合法IP(经本人验证,该方法不太好用便直接只验证IPV4地址) if(filter_var($ip, FILTER_VALIDATE_IP)) ...
  • 多数人看到这篇日志,第印象肯定是以为是...判断是否合法的IPv4 IP地址 if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { // it's valid } else { // it's not valid } 判断是否合法的公共IPv4地址
  • BGP版本: 版本4:传统的BGP,只能激活单播的bgp邻居关系进程,...台路由器收到邻居给我发送的open报文,会查看里面各种各样参数之前,判断open报文是否合法。看三层报头的源ip地址, 本地的bgp进程中neighbor他 ...
  • 你必须知道的495C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    1.30如何判断哪些标识符可以使用,哪些被保留了? 初始化 1.31 对于没有显式初始化的变量的初始值可以作怎样的假定?如果一个全局变量初始值为“零”,它可否作为空指针或浮点零? 1.32 下面的代码为什么不能...
  • 1.30 如何判断哪些标识符可以使用,哪些被保留了? 15 初始化 18 1.31 对于没有显式初始化的变量的初始值可以作怎样的假定?如果一个全局变量初始值为“零”,它可否作为空指针或浮点零? 18  1.32 下面的...
  • 1.30如何判断哪些标识符可以使用,哪些被保留了? 初始化  1.31 对于没有显式初始化的变量的初始值可以作怎样的假定?如果一个全局变量初始值为“零”,它可否作为空指针或浮点零?  1.32 下面的代码为什么不能...
  • 1.30 如何判断哪些标识符可以使用,哪些被保留了? 44 初始化 47 1.31 对于没有显式初始化的变量的初始值可以作怎样的假定?如果一个全局变量初始值为“零”,它可否作为空指针或浮点零? 47 1.32 下面的代码为...
  • 1.30 如何判断哪些标识符可以使用,哪些被保留了? 44 初始化 47 1.31 对于没有显式初始化的变量的初始值可以作怎样的假定?如果一个全局变量初始值为“零”,它可否作为空指针或浮点零? 47 1.32 下面的代码为...
  • 《你必须知道的495C语言问题》

    热门讨论 2010-03-20 16:41:18
    1.30 如何判断哪些标识符可以使用,哪些被保留了? 15 初始化 18 1.31 对于没有显式初始化的变量的初始值可以作怎样的假定?如果一个全局变量初始值为“零”,它可否作为空指针或浮点零? 18  1.32 下面的...
  •  命名空间 1.30如何判断哪些标识符可以使用,哪些被保留了? 初始化 1.31 对于没有显式初始化的变量的初始值可以作怎样的假定?如果一个全局变量初始值为“零”,它可否作为空指针或浮点零? 1.32 下面的代码...
  • 1.30 如何判断哪些标识符可以使用,哪些被保留了? 初始化 1.31 对于没有显式初始化的变量的初始值可以作怎样的假定?如果一个全局变量初始值为“零”,它可否作为空指针或浮点零? 1.32 下面的代码为什么不能编译?...
  •  1.30 如何判断哪些标识符可以使用,哪些被保留了?  初始化  1.31 对于没有显式初始化的变量的初始值可以作怎样的假定?如果一个全局变量初始值为“零”,它可否作为空指针或浮点零?  1.32 下面的代码为什么...
  • 1.30 如何判断哪些标识符可以使用,哪些被保留了? 初始化 1.31 对于没有显式初始化的变量的初始值可以作怎样的假定?如果一个全局变量初始值为“零”,它可否作为空指针或浮点零? 1.32 下面的代码为什么不能编译?...

空空如也

空空如也

1 2 3 4 5
收藏数 81
精华内容 32
关键字:

如何判断一个ip地址是否合法