当前位置:编程学习 > C/C++ >>

HDU2206:IP的计算

Problem Description
在网络课程上,我学到了很多有关IP的知识。IP全称叫网际协议,有时我们又用IP来指代我们的IP网络地址,现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如192.168.100.16,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。www.zzzyk.com
但是粗心的我,常常将IP地址写错,现在需要你用程序来判断。
 
 
Input
输入有多个case,每个case有一行,不超过100个字符。
 
 
Output
对于每个case,判断输入的IP是否正确,如果正确输入YES,否则NO。
 
 
Sample Input
192.168.100.16
 
 
Sample Output
YES
 
 
 
 
[cpp]  
/* 
这道题之前就看到过了,只是一直不知道怎么去判断什么才是IP地址,直到今天参考 
了别人的代码才知道,IP地址应该满足如下条件: 
1.  '.'有且只能有3个 
2.  4个放数字的位置,长度应该在1~3之间(含边界) 
3.  每个数字应该:1~255(含边界) 
4.  不能有特殊字符 
*/  
  
#include"stdio.h"  
#include"string.h"  
int main()  
{  
    int flag;  
    char str[111];  
    int temp;  
    int i,l;  
    int place[10],k;  
    while(gets(str)!=0)  
    {  
        //'.'有且只能有3个  
        place[0]=-1;  
        k=1;  
        temp=0;  
        for(i=0;str[i];i++) if(str[i]=='.') {temp++;place[k]=i;k++;}  
        if(temp!=3)  
        {  
            printf("NO\n");  
            continue;  
        }  
        place[k]=i;  
        k++;  
  
  
        //不能有特殊字符  
        flag=0;  
        for(i=0;str[i];i++)  
        {  
            if(!((str[i]=='.')||('0'<=str[i]&&str[i]<='9')))  
            {  
                printf("NO\n");  
                flag=1;  
                break;  
            }  
        }  
        if(flag==1) continue;  
  
  
        //4个放数字的位置,长度应该在1~3之间(含边界)  
        flag=0;  
        for(i=1;i<k;i++)  
        {  
            if(place[i]-place[i-1]==1||place[i]-place[i-1]>4)  
            {  
                printf("NO\n");  
                flag=1;  
                break;  
            }  
        }  
        if(flag==1) continue;  
  
  
        //每个数字应该:1~255(含边界)  
        flag=0;  
        for(i=1;i<k;i++)  
        {  
            temp=0;  
            for(l=place[i-1]+1;l<place[i];l++)  
            {  
                temp*=10;  
                temp+=str[l]-'0';  
            }  
            if(temp>=256)  
            {  
                printf("NO\n");  
                flag=1;  
                break;  
            }  
        }  
        if(flag==1) continue;  
  
  
        printf("YES\n");  
    }  
    return 0;  
}  
 
 
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,