1. 程式人生 > >判斷輸入IP格式是否正確

判斷輸入IP格式是否正確

問題描述

在網路課程上,我學到了很多有關IP的知識.IP全稱叫網際協議,有時我們又用IP來指代我們的IP網路地址,現在IPV4下用一個32位無符號整數來表示,一般用點分方式來顯示,點將IP地址分成4個部分,每個部分為8位,表示成一個無符號整數(因此不需要用正號出現),如192.168.100.16,是我們非常熟悉的IP地址,一個IP地址串中沒有空格出現(因為要表示成一個32數字)。但是粗心的我,常常將IP地址寫錯,現在需要你用程式來判斷

輸入

輸入有多個的情況下,每個殼體有一行,不超過100個字元。

輸出

對於每個情況下,判斷輸入的IP是否正確,如果正確輸入YES,否則NO

參考程式碼

#include<stdio.h>

#include<string.h>int ip(char s[])//用於判斷IP輸入是否正確;{    int l,a=0,c=0,i;//l用於表示字串長度;a用於表示IP編碼中一個段的數值大小;c表示字串中“.”,的個數;   l=strlen(s);

    if(s[0]=='.')//判斷第一個字元,是否為“.”;        return 0;    if(s[0]<='9'&&s[0]>='0')//判斷第一個字元是否為0~9;是:計入a中;否:返回0        a=a+s[0]-'0';    else        return 0;    for(i=1;i<l;i++)

//判斷接下來的字元;    {        if((s[i]>'9'||s[i]<'0')&&s[i]!='.')//0~9 .’,其他值都返回0            return 0;        if(s[i]=='.'&&s[i-1]=='.')//如果兩個點在一起證明,之間沒有數,錯誤;            return 0;        if(s[i]=='.')//字元為‘.’,說明一個段結束;清空數值a,並記錄c(點數)        {            a=0;c++;        }        else        {            a=a*10+s[i]-'0';
            if(a>255)//判斷a的值,a都應小於255                return 0;        }    }    if(c==3)//滿足以上條件,並字串中點總數為3;則IP輸入正確;        return 1;    else        return 0;}int main(){    char s[101];    while(gets(s)!=NULL)//多組測試,直到檔案結束    {        if(ip(s)==1)//呼叫函式,判斷其返回值;        printf("YES\n");        else        printf("NO\n");    }    return 0;}

總結:在面對這種,過程複雜,判斷結果單一的題目時,利用自定義函式,可以讓做題更方便。函式只會返回一個返回值;這樣當我們有了一些條件可以排除一些錯誤答案時,我們返回一個值,令函式結束,可以節省一些不必要的麻煩;提交程式碼後,答案錯誤:格式錯誤,有一些未考慮到的測試值;

gets()返回值是char*,在檔案讀取末尾返回值是NULL