HDU 2206 IP的计算 WA

WA了n把,我心已碎

未AC代码 各种情况补了又补 太狼狈了 先放着 有心情在做吧

 1 #include <iostream>
 2 #include <string.h>
 3 #include <stdio.h>
 4 using namespace std;
 5 #define MAX 1050
 6 
 7 int main()
 8 {
 9     char v[MAX];
10     while(gets(v))
11     {
12         int i, start, flag = 1, point = 1, head = 0, sum = 0, cnt_p = 0;
13 
14         for(start = 0; v[start] == ' '; start++); // 去前导空格
15 
16         if((strlen(v) - start) > 15)
17         {
18             cout << "NO" << endl;
19             continue;
20         }
21 
22         for(i = start; i < strlen(v); i++)
23         {
24             if(sum > 255)
25             {
26                 flag = 0;
27                 break;
28             }
29 
30             if((i == start && v[i] == '.') || (i == start && v[i] == '0'))
31             {    // 首位'.' or 首位'0'
32                 flag = 0;
33                 break;
34             }
35             else if(v[i] == '0' && (!point && !head))
36             {
37                 flag = 0;
38                 break;
39             }
40             else if(v[i] == '.')
41             {
42                 if(v[i+1] == '.') // 10...
43                 {
44                     flag = 0;
45                     break;
46                 }
47                 point = 1;
48                 cnt_p++; // '.'计数
49                 sum = 0;
50                 head = 0; // 0 之前是否有非零数
51             }
52             else if(v[i] >= '0' && v[i] <= '9')
53             {
54                 if(!head && !sum && !point)// 10.01.01.01
55                 {
56                     flag = 0;
57                     break;
58                 }
59                 if(v[i]-'0' > 0)
60                     head = 1;
61                 sum = sum*10 + v[i]-'0';
62                 point = 0;
63             }
64             else // 不能有其他字符出现
65             {
66                 flag = 0;
67                 break;
68             }
69 
70             //
71             if((i+1) == strlen(v) && v[i] == '.')//10.0.0.避免最后一个无数字
72             {
73                 flag = 0;
74                 break;
75             }
76         }
77         if(sum > 255)//最后一组没有判断
78             flag = 0;
79         if(flag && cnt_p == 3)
80             cout << "YES" << endl;
81         else
82             cout << "NO" << endl;
83         memset(v, '\0', MAX);
84     }
85 }

转载于:https://www.cnblogs.com/shichuanwang/archive/2012/07/07/2580240.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值