hdu2206

来源:互联网 发布:小榕哥sql注入工具 编辑:程序博客网 时间:2024/05/29 17:27

题目来源:http://acm.hdu.edu.cn/diy/contest_showproblem.php?pid=1001&cid=31288&problem=Problem%20%20F

解法或类型循环结构

Description

在网络课程上,我学到了很多有关IP的知识。IP全称叫网际协议,有时我们又用IP来指代我们的IP网络地址,现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如192.168.100.16,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。
但是粗心的我,常常将IP地址写错,现在需要你用程序来判断

Input

输入有多个case,每个case有一行,不超过100个字符。

Output

对于每个case,判断输入的IP是否正确,如果正确输入YES,否则NO。  

Sample Input

192.168.100.16 

Sample Output

YES
题意描述
  提供一个ip地址判断是否合法。
解题思路
      先用循环把IP地址的四段数字提取出来分别存进四个空字符串,然后依次判断这四个字符串中的数字是否在0~255之间,是否是三个字符组成。
时空分析: 

  

程序代码:

#include<stdio.h>

#include<string.h>

int main()

{

       chara[10000],b[100],c[100],d[100],e[100];

       intv,i,m,n,t,j,k,y,h,l,s1,s2,s3,s4,l1,l2,l3,l4,z1,z2,z3,z4;

      

       while(gets(a)!=NULL)

       {

              h=0;

              for(i=0;a[i]!='\0';i++)

              {

                     if(a[i]=='.')

                     h++;

              }

      

       t=0;

       for(i=0;a[i]!='.';i++)

       {

              b[t]=a[i];

              t++;

       }

       s1=0;

       z1=0;

       for(i=0;i<t;i++)

       {

              s1=s1*10+b[i]-48;

      

    }

   

   

       if(b[0]=='0'&&t>1)

   z1=1;

      

       m=0;

       for(j=i+1;a[j]!='.';j++)

       {

              c[m]=a[j];

              m++;

       }

       s2=0;

       z2=0;

       for(i=0;i<m;i++)

       {

              s2=s2*10+c[i]-48;

             

    }

   

   

       if(c[0]=='0'&&m>1)

   z2=1;

 

       n=0;

       for(k=j+1;a[k]!='.';k++)

       {

              d[n]=a[k];

              n++;

       }

       s3=0;

       z3=0;

       for(i=0;i<n;i++)

       {

              s3=s3*10+d[i]-48;

             

    }

   

 

       if(d[0]=='0'&&n>1)

   z3=1;

   

       y=0;

       for(l=k+1;a[l]!='\0';l++)

       {

              e[y]=a[l];

              y++;

       }

       s4=0;

       z4=0;

       for(i=0;i<y;i++)

       {

              s4=s4*10+e[i]-48;

             

    }

      

      

   if(e[0]=='0'&&y>1)

   z4=1;

   

   

if(h!=3||z1==1||z2==1||z3==1||z4==1||t==0||m==0||n==0||y==0||t>3||m>3||n>3||y>3||s1<0||s1>255||s2<0||s2>255||s3<0||s3>255||s4<0||s4>255)

       printf("NO\n");

       else

       printf("YES\n");

      

       }

       return0;

}

 

这个改了很多次能想到的例子都试了就是对不了。

错误分析: 1、忘记处理一些特殊形式的IP地址;如00.00.00.00;…;01.0.0.0;010.0.0.0;001.0.0.0。

0 0
原创粉丝点击