red


私信TA

用户名:redln

访问量:1338

签 名:

等  级
排  名 40340
经  验 374
参赛次数 0
文章发表 2
年  龄 0
在职情况 学生
学  校 哈尔滨远东理工学院
专  业

  自我简介:

TA的其他文章

    解题思路:

    一个合格的IP地址:192.168.2.1。

    以“.”为分割处,将其分割为4部分,每一部分分别判断。

    1.将整体放在字符数组(ip[30])里,将分开的4部分放在字符数组(a[4] b[4[] c[4] d[4])里。

    2.对分开的四部分分别判断:

        (1)判断正负

        (2)判断长度

        (3)判断有其他字符的出现

    注意事项:

    将字符数组转换为数字

    参考代码:


#include<iostream>    
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
char a[4],b[4],c[4],d[4],ip[30];
int alen = 0, blen = 0, clen = 0, dlen = 0;

void cut(){
    int len = strlen(ip);
    int i = 0;
    while(ip[i] != '.'){
        a[alen++] = ip[i];
        i++;
        //cout << "a:" << i << " ";
    }
    i++;//跳过 "."
    while(ip[i] != '.'){
        b[blen++] = ip[i];
        i++;
        //cout << "b:" << i << " ";
    }
    i++;//跳过 "."
    while(ip[i] != '.'){
        c[clen++] = ip[i];
        i++;
    }
    i++;//跳过 "."
    while(ip[i] < len){
        d[dlen++] = ip[i];
        i++;
    }
    /*for(int f = 0; f < alen; f++)
    cout << a[f];
    cout << endl;
    for(int k = 0; k < blen; k++)
    cout << b[k];*/
}
void judge(char *ip){
    int leng = strlen(ip);
    int ans = 0;
    if(leng > 15){
        cout << "N" << endl;
        return;
    }else{
        cut();//分为 4段 a b c d
    
    
    if(a[0] == '-' || b[0] == '-' || c[0] == '-' || d[0] == '-'){
        cout << "N" << endl;
        return;
    }else{
        int aans = 0,bans = 0,cans = 0,dans = 0;
        //a段进行判断是否小于255
        for(int j = 0; j < alen; j++){
            if(a[j] >= '0' && a[j] <= '9'){
                aans += aans * 10 + (a[j] - '0');
            }
            else{
                cout << "N" << endl;
                return;
            }
        }
        if(aans > 255){
                cout << "N" << endl;
                return;
            }else{
                cout << "Y" << endl;
                return;
        }
        
        //b段进行判断是否小于255
        for(int j = 0; j < blen; j++){
            if(b[j] >= '0' && b[j] <= '9'){
                bans += bans * 10 + (b[j] - '0');
            }
            else{
                cout << "N" << endl;
                return;
            }    
        }
        if(bans > 255){
                cout << "N" << endl;
                return;
            }else{
                cout << "Y" << endl;
                return;
        }
        
        //c段进行判断是否小于255
        for(int j = 0; j < clen; j++){
            /*
            101
            0+1=1
            1 * 10 + 0 = 10
            10 * 10 + 1 = 101
            */
            if(c[j] >= '0' && c[j] <= '9'){
                cans += cans * 10 + (c[j] - '0');
            }
            else{
                cout << "N" << endl;
                return;
            }
        }
        if(cans > 255){
                cout << "N" << endl;
                return;
            }else{
                cout << "Y" << endl;
                return;
        }
        
        //d段进行判断是否小于255
        for(int j = 0; j < dlen; j++){
            if(d[j] >= '0' && d[j] <= '9'){
                dans += dans * 10 + (d[j] - '0');
            }
            else{
                cout << "N" << endl;
                return;
            }    
        }
        if(dans > 255){
                cout << "N" << endl;
                return;
            }else{
                cout << "Y" << endl;
                return;
            }
        }        
    }    
}
int main(){
    while(scanf("%s",ip) != EOF){
        judge(ip);
    }
    return 0;
}

 

0.0分

0 人评分

  评论区

  • «
  • »