Problem Description
在网络课程上,我学到了很多有关IP的知识。IP全称叫网际协议,有时我们又用IP来指代我们的IP网络地址,现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如192.168.100.16,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。 但是粗心的我,常常将IP地址写错,现在需要你用程序来判断。
Input
输入有多个case,每个case有一行,不超过100个字符。
Output
对于每个case,判断输入的IP是否正确,如果正确输入YES,否则NO。
Sample Input
192.168.100.16
Sample Output
YES
//这是一道神坑之题!!
//我要冷静!!我要冷静!!不能摔电脑!!
//具体注意事项看代码
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int main() { char data[105]; int flag,t; while(gets(data)) { flag=1;//假设是对的 for(int i=0;i<strlen(data);i++)//第一步,先找是否有特殊符号 { if((data[i]<'0'||data[i]>'9')&&data[i]!='.') flag=0; } //第二步,看是否有且只有三个'.' int cnt=0; for(int i=0;i<strlen(data);i++) { if(data[i]=='.') cnt++; } if(cnt!=3) flag=0; //第三步,看两个点之间的长度是否是1~3位; int num=0,l,k=0;; char p[100]; l=strlen(data); data[l]='.'; data[l+1]='\0'; t=0; int wei=0; for(int i=0;i<=strlen(data);i++) { if(data[i]!='.') wei++; else if(data[i]=='.'&&data[i-1]!='.') { if(wei<1||wei>3) flag=0; wei=0; } } //第四步,看数字是不是1~255 for(int i=0;i<=strlen(data);i++) { if(data[i]!='.') { p[k]=data[i]; k++; } else if(data[i-1]!='.'&&i>0) { p[k]='\0'; num=atoi(p); if(num>255)//if(num<1||num>255)此处是此题神坑位置。。。因为000.3.3.3是正确的。。 flag=0; k=0; t++; } } if(t!=4) flag=0; if(flag==0) cout<<"NO"<<endl; if(flag==1) cout<<"YES"<<endl; } return 0; }
来源:https://www.cnblogs.com/nefu929831238/p/5329852.html