zoukankan      html  css  js  c++  java
  • IP判断 (字符串处理)

    关于IP合法性判断的题目,每个oj上的约束条件不尽相同,我就根据自己做过的题目吧所有的约束条件汇总到一块,到时候做题时只需要把多余的越是条件删掉即可

    题目描述:

    对于IP我们总会有一定的规定,合法的IP必须的满足我们给定的条件,先在我们对IP的合法性做出以下的规定。

    1.IP中必须有四个数字,三个'.',并且数字的范围要在[0,255]之间

    2.IP中除了数字和小数点之外不能够有其他的字符

    3.IP的首位不能为'.'

    4.还需要的别注意的就是"0000"这种情况虽然转换为整型满足条件,但是实际上所有的数字最多只能为三位数

    5.我们添加一个额外的规定,就是所有的数字不允许有前导零存在,如001、000这种情况,但是0是合法的。(当然这个约束条件可以根据题目进行变动,一般的题目没有这个约束条件,只是今天做的题目有,所以就加上了)

    6.IP中不能够出现两个连续的'.'

    代码:

        #include <iostream>
        #include <stdio.h>
        #include <cstring>
        using namespace std;
        int numShu=0;
        int numDian=0;
        int cinverti(char s[])  //将一个字符串类型的数字转换为整型,并且判断这个数是否有0开头,但是整个数可以为0
        {
            int len,t=0;
            len=strlen(s);
            if(len>=4)//大于三位数,不合法 
                t=-1;
            else
            {
                for(int i=0; i<len; i++)
                {
                    t=10*t+s[i]-'0';  //将这个数计算出来
                }         
                if(len>=2&&s[0]=='0' )//如果数是大于两位并且第一位为0肯定不合法
                    t=-1;//标记这个数不合法   
            }
            return t;
        }
        int IsIP(char str[])
        {
            numShu=0;
            numDian=0;
            char  tmp[10];
            int i=0,num;
            for(int j=0; str[j]!=''; j++) //循环整个ip
            {
                i=0;
                if(str[0]=='.')//首位为0的,肯定就是不合法的 
                    return 0;
                while(str[j]!='.'&&str[j]!='')
                {
                    if(str[j] >'9'||str[j]<'0')//出现不是数字的,不合法 
                        return 0;
                    if(str[j]>='0'&&str[j]<='9')//将当前的数字字符串放到temp中暂存 
                    {
                        tmp[i]=str[j]; 
                        j++;
                        i++;
                    }
                }
                if(str[j]=='.'&&str[j-1]=='.')//出现连续两个'.',不合法 
                    return 0;
                if(str[j]=='.'&&str[j+1]!='.'&&str[j-1]!='.')//不是连续的,小数点位数加 
                {
                    numDian++;
                }
                tmp[i]='';
                num=cinverti(tmp);//转换为int型 
                if(num<0||num>255)//超出约定范围,不合法 
                    return 0;
                else
                  numShu++;//否则,数的位数加 
            }
            if(numShu==4&&numDian==3 )
                return 1;
            else
                return 0;
        }
        
        int main()
        {
            char ip[30]= {''};
            while(cin>>ip)
            {
                if(IsIP(ip))
                    printf("Y
    ");
                else
                    printf("N
    ");
            }
            return 0;
        }
    
  • 相关阅读:
    分布式服务之CAP定理
    VUE启动报错
    码云管理项目
    推广项目之日志打印
    asp.net mvc中使用jquery H5省市县三级地区选择控件
    asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发4- 后台模板html页面创建
    asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发2-Model层建立
    asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发3-登录模块开发
    asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发1-准备工作
    asp.net mvc下实现微信公众号(JsApi)支付介绍
  • 原文地址:https://www.cnblogs.com/cmmdc/p/6729555.html
Copyright © 2011-2022 走看看