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
/*這道題之前就看到過了,只是一直不知道怎麼去判斷什麼才是IP地址,直到今天參考了別人的代碼才知道,IP地址應該滿足如下條件:1. '.'有且只能有3個2. 4個放數位位置,長度應該在1~3之間(含邊界)3. 每個數字應該:1~255(含邊界)4. 不能有特殊字元*/#include"stdio.h"#include"string.h"int main(){int flag;char str[111];int temp;int i,l;int place[10],k;while(gets(str)!=0){//'.'有且只能有3個place[0]=-1;k=1;temp=0;for(i=0;str[i];i++)if(str[i]=='.'){temp++;place[k]=i;k++;}if(temp!=3){printf("NO\n");continue;}place[k]=i;k++;//不能有特殊字元flag=0;for(i=0;str[i];i++){if(!((str[i]=='.')||('0'<=str[i]&&str[i]<='9'))){printf("NO\n");flag=1;break;}}if(flag==1)continue;//4個放數位位置,長度應該在1~3之間(含邊界)flag=0;for(i=1;i<k;i++){if(place[i]-place[i-1]==1||place[i]-place[i-1]>4){printf("NO\n");flag=1;break;}}if(flag==1)continue;//每個數字應該:1~255(含邊界)flag=0;for(i=1;i<k;i++){temp=0;for(l=place[i-1]+1;l<place[i];l++){temp*=10;temp+=str[l]-'0';}if(temp>=256){printf("NO\n");flag=1;break;}}if(flag==1)continue;printf("YES\n");}return 0;}