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 }