zoukankan      html  css  js  c++  java
  • ACM题目1116: IP判断

    题目描述

    在基于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
    思路:
    想到依次检查ABCD的值是否在范围内,但是没有想到巧妙的利用scanf
    scanf从第一个不符合输入格式的地方结束,剩下的东西会放在缓冲区
    例如 输入 9.a.2.4 时,如果a,b,c,d的初值为零, 进行输入后,只有a的值改变成9,b,c,d都没有变。
    scanf()的返回值是:如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。
    错误调试:
    
    
    
    k的问题是因为格式没有写正确,错误写成 while(~k=scanf("%d.%d.%d.%d,&a,&b,&c,&d"))
    正确写法
    while(~(k=scanf("%d.%d.%d.%d",&a,&b,&c,&d)))
    
    
    #include<stdio.h>
    #include <string.h>
    int main()
    {
        int a,b,c,d;
        int k;
        char s[100];//从标准输入设备读字符串函数
        char end[100]={"End of file"};//保存输入结束的字符
        while(~(k=scanf("%d.%d.%d.%d",&a,&b,&c,&d)))
        {
            gets(s);
            if(strcmp(s,end)==0)
            {
                
                return 0;
            }
            else if(s[0]!='')
            {
                printf("N
    ");
                continue;
            }
            if(k==4&&a>=0&&a<=255&&b>=0&&b<=255&&c>=0&&c<=255&&d>=0&&d<=255)
            {
                printf("Y
    ");
            }
            else
            {
                printf("N
    ");
            }
            fflush(stdin);
        }
        return 0;
    }
    
    
    

    总结:

    fflush(stdin):清除缓冲区

    strcmp:检查两个字符串是否匹配strcmp(s,end)==0

    gets()从标准输入设备读字符串函数

    continue:就是在一个循环里面,如果在某个时刻continue编译器会跳过这次循环,执行下一次循环,但不结束循环

    结束循环用Break,结束整个程序用exit(0)

    
    
  • 相关阅读:
    1.27
    1.25
    Representation Learning with Contrastive Predictive Coding
    Learning a Similarity Metric Discriminatively, with Application to Face Verification
    噪声对比估计(负样本采样)
    Certified Adversarial Robustness via Randomized Smoothing
    Certified Robustness to Adversarial Examples with Differential Privacy
    Dynamic Routing Between Capsules
    Defending Adversarial Attacks by Correcting logits
    Visualizing Data using t-SNE
  • 原文地址:https://www.cnblogs.com/redzzy/p/13671379.html
Copyright © 2011-2022 走看看