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;
        }
    
  • 相关阅读:
    SqlCeConnectionBeginTransaction 方法
    父子继承窗体,子窗体视图无法正常打开,解决办法
    Windows Mobile 如何和模拟器关联有用的URL
    Windows Mobile 6.5.3 Developer Tool Kit
    通过Eclipse import导入项目,並重新命名Project
    【杂】Oracle使用记录:分区表及执行计划
    实践 2-0 selenium使用的一些总结
    实践2-1 python连接Oracle数据库
    【杂】word文件加密和压缩加密
    【杂】HIVE使用记录:回收站及从回收站恢复分区表
  • 原文地址:https://www.cnblogs.com/cmmdc/p/6729555.html
Copyright © 2011-2022 走看看