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;
        }
    
  • 相关阅读:
    android 75 新闻列表页面
    android 74 下载文本
    android 73 下载图片
    android 72 确定取消对话框,单选对话框,多选对话框
    android 71 ArrayAdapter和SimpleAdapter
    android 70 使用ListView把数据显示至屏幕
    maven如何将本地jar安装到本地仓库
    Centos6.7搭建ISCSI存储服务器
    解决maven打包编译出现File encoding has not been set问题
    MySQL 解决 emoji表情 的方法,使用utf8mb4 字符集(4字节 UTF-8 Unicode 编码)
  • 原文地址:https://www.cnblogs.com/cmmdc/p/6729555.html
Copyright © 2011-2022 走看看