Problem Description 在網絡課程上,我學到了很多有關IP的知識。IP全稱叫網際協議,有時我們又用IP來指代我們的IP網絡地址,現在IPV4下用一個32位無符號整數來表示,一般用點分方式來顯示,點將IP地址分成4個部分,每個部分為8位,表示成一個無符號整數(因此不需要用正號出現),如192.168.100.16,是我們非常熟悉的IP地址,一個IP地址串中沒有空格出現(因為要表示成一個32數字)。www.2cto.com 但是粗心的我,常常將IP地址寫錯,現在需要你用程序來判斷。 Input 輸入有多個case,每個case有一行,不超過100個字符。 Output 對於每個case,判斷輸入的IP是否正確,如果正確輸入YES,否則NO。 Sample Input 192.168.100.16 Sample Output YES [cpp] /* 這道題之前就看到過了,只是一直不知道怎麼去判斷什麼才是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; }