在基于Internet的程序中,我们常常需要判断一个IP字符串的合法性。
合法的IP是这样的形式:
A.B.C.D
其中A、B、C、D均为位于[0, 255]中的整数。为了简单起见,我们规定这四个整数中不允许有前导零存在,如001这种情况。
现在,请你来完成这个判断程序吧!
输入
输入由多行组成,每行是一个字符串,输入由“End of file”结束。
字符串长度最大为30,且不含空格和不可见字符
输出
对于每一个输入,单独输出一行
如果该字符串是合法的IP,输出Y,否则,输出N
样例输入
1.2.3.4
a.b.c.d
267.43.64.12
12.34.56.bb
210.43.64.129
-123.4.5.6
样例输出
Y
N
N
N
Y
N
#include <bits/stdc++.h>
using namespace std;
int main()
{
char a[30],b[30],c[30]="End of file";
int j=0;
while(strcmp(gets(a),c)!=0){//判断两个字符串是否相等,不能gets(a)!="End of file"
b[j]='Y';//假设全是正确的。
int count_p=0;
int count_s=0;
for(int i=0;i<strlen(a);i++){
count_s++;
if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')){//判断出现字母
b[j]='N';
}
if(a[i]=='.'){
count_p++;
if(count_s>=5){
b[j]='N';
}
else if(count_s==4){
if(a[i-3]<'1'||a[i-3]>'2'){
b[j]='N';
}
if(a[i-3]=='2'){
if(a[i-2]>'5'){
b[j]='N';
}
if(a[i-2]=='5'){
if(a[i-1]>'5'){
b[j]='N';
}
}
}
}
else if(count_s==3){
if(a[i-2]=='0'){
b[j]='N';
}
}
count_s=0;
}
}
if(count_p!=3){//最后还要判断点数是否为3,这里不能写反面情况,不然会覆盖。
b[j]='N';
}
j++;
char a[30];//循环一次,重新定义。
}
for(int i=0;i<strlen(b);i++){
cout<<b[i]<<endl;
}
return 0;
}