还是WA......我心已碎
先留着wa的
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
#define MAX 1050
int main()
{
char v[MAX];
while(gets(v))
{
int i, start, flag = 1, point = 1, head = 0, sum = 0, cnt_p = 0;
for(start = 0; v[start] == ' '; start++); // 去前导空格
if((strlen(v) - start) > 15)
{
cout << "NO" << endl;
continue;
}
for(i = start; i < strlen(v); i++)
{
if(sum > 255)
{
flag = 0;
break;
}
if((i == start && v[i] == '.') || (i == start && v[i] == '0'))
{ // 首位'.' or 首位'0'
flag = 0;
break;
}
else if(v[i] == '0' && (!point && !head))
{
flag = 0;
break;
}
else if(v[i] == '.')
{
if(v[i+1] == '.') // 10...
{
flag = 0;
break;
}
point = 1;
cnt_p++; // '.'计数
sum = 0;
head = 0; // 0 之前是否有非零数
}
else if(v[i] >= '0' && v[i] <= '9')
{
if(!head && !sum && !point)// 10.01.01.01
{
flag = 0;
break;
}
if(v[i]-'0' > 0)
head = 1;
sum = sum*10 + v[i]-'0';
point = 0;
}
else // 不能有其他字符出现
{
flag = 0;
break;
}
//
if((i+1) == strlen(v) && v[i] == '.')//10.0.0.避免最后一个无数字
{
flag = 0;
break;
}
}
if(sum > 255)//最后一组没有判断
flag = 0;
if(flag && cnt_p == 3)
cout << "YES" << endl;
else
cout << "NO" << endl;
memset(v, '\0', MAX);
}
}