蓝桥杯训练题,IP判断,codeblocks编译

在基于Internet的程序中,我们常常需要判断一个IP字符串的合法性。
合法的IP是这样的形式:
A.B.C.D
其中A、B、C、D均为位于[0, 255]中的整数。为了简单起见,我们规定这四个整数中不允许有前导零存在,如001这种情况。
现在,请你来完成这个判断程序吧!
输入
输入由多行组成,每行是一个字符串,输入由“End of file”结束。
字符串长度最大为30,且不含空格和不可见字符

输出
对于每一个输入,单独输出一行
如果该字符串是合法的IP,输出Y,否则,输出N

样例输入
1.2.3.4
a.b.c.d
267.43.64.12
12.34.56.bb
210.43.64.129
-123.4.5.6
样例输出
Y
N
N
N
Y
N

#include <bits/stdc++.h>

using namespace std;

int main()
{
    char a[30],b[30],c[30]="End of file";
    int j=0;
    while(strcmp(gets(a),c)!=0){//判断两个字符串是否相等,不能gets(a)!="End of file"
        b[j]='Y';//假设全是正确的。
        int count_p=0;
        int count_s=0;
        for(int i=0;i<strlen(a);i++){
            count_s++;
            if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')){//判断出现字母
                b[j]='N';
            }
            if(a[i]=='.'){
                count_p++;
                if(count_s>=5){
                    b[j]='N';
                    
                }
                else if(count_s==4){
                    if(a[i-3]<'1'||a[i-3]>'2'){
                        b[j]='N';
                    }
                    if(a[i-3]=='2'){
                        if(a[i-2]>'5'){
                            b[j]='N';
                        }
                        if(a[i-2]=='5'){
                            if(a[i-1]>'5'){
                                b[j]='N';
                            }
                        }
                    }
                }
                else if(count_s==3){
                   if(a[i-2]=='0'){
                        b[j]='N';
                   }
                }
                count_s=0;
            }
        }
        if(count_p!=3){//最后还要判断点数是否为3,这里不能写反面情况,不然会覆盖。
            b[j]='N';
        }
        j++;
        char a[30];//循环一次,重新定义。
    }

    for(int i=0;i<strlen(b);i++){
        cout<<b[i]<<endl;
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值