HDu 2206 IPの計算シミュレーション

2302 ワード

IPの計算
Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7980    Accepted Submission(s): 1570
Problem Description
インターネットの授業で、IPに関する多くの知識を学びました.IPのフルネームはインターネットプロトコルと呼ばれて、时には私达はまたIPで私达のIPネットワークのアドレスを指して、今IPV 4の下で1つの32ビットの符号のない整数で表して、一般的に点分けの方式で表示して、点はIPアドレスを4つの部分に分けて、各部分は8ビットで、1つの符号のない整数を表して(そのためプラス記号で现れる必要はありません)、例えば192.168.100.16、私达のとても熟知しているIPアドレスで、1つのIPアドレス列にスペースは表示されません(32数字で表すため).
しかし、不注意な私は、よくIPアドレスを書き間違えて、今あなたがプログラムで判断する必要があります.
 
Input
複数のcaseが入力され、各caseには100文字を超えない行があります.
 
Output
各caseについて,入力したIPが正しいか否かを判断し,YESが正しく入力されている場合はNOとする.
 
Sample Input

   
   
   
   
192.168.100.16

 
Sample Output

   
   
   
   
YES

 
中国語はやはりすべて読むことができて、私は注意しなければならないのをすべて備考して書きました.
waは何度もやったが,この問題はあまりにも試練に細心の注意を払った.
#include<stdio.h>
#include<string.h>
char a[200];
bool check()
{
    int tem=-1,i;
    int sum=0;
    int count=0;
    for(i=strlen(a)-1;a[i]==' ';i--)//       
        a[i]=0; 
    for(i=0;a[i]!=0;i++)
    { 
        if(a[i]>='0'&&a[i]<='9')//         tem,count    
        {
            if(tem==-1)
                tem=0;
            tem*=10;
            tem+=a[i]-'0';
            count++;
        }
        else if(a[i]!='.')//       .         
            return 0;
        if(a[i]=='.'||a[i+1]==0)//            ,           。
        {
            sum++;
            if(tem<0||tem>255)//       -1          
                return 0; 
            tem=-1;
            if(count>3)//          
                return 0; 
            count=0;
        }
        if(a[i]=='.'&&a[i+1]==0)//     
            return 0;
    }
    if(sum==4)//         ;
    return 1;
    else
        return 0;
}
int main()
{ 
    while(gets(a)!=NULL)
    {
        if(check())
            puts("YES");
        else
            puts("NO");
    }
    return 0;
}