判斷字串是否為IP地址
阿新 • • 發佈:2019-01-09
bool IsIPAddress(const char *str) { if(str==NULL || *str=='\0' || *str=='.') //這個地方就不解釋了 return false; int len=strlen(str); int i=0,j=0; //i用來控制迴圈,j用來指示陣列arr[] int arr[4]; //arr[4]用來儲存ip四個欄位的值,如"192.234.156.1",arr[0]儲存192,arr[1]儲存234.... memset(arr,0,sizeof(int)*4); //陣列初始化 for (;i<len;i++) { if (str[i]>='0' && str[i]<='9') //如果當前字元是數字 { arr[j]=arr[j]*10+str[i]-'0'; //用arr[j]儲存當前欄位的數值 } else if (str[i]=='.') //如果當前字元是'.' { if (str[i+1]=='\0' || str[i+1]=='.')//如果下一個字元為結尾符或出現連續兩個'.' { return false; } j++; //進入下一個欄位 if(j>3) //如果欄位數大於4個,說明肯定不是ip地址;注arr[0]-arr[3],所以是j>3,不是j>4 return false; //arr[j]=0;【此處已更正,這兩行話可忽視】//【注意!】這個地方沒弄懂!我上面明明已經用memset把陣列arr[]都初始化為0 了, //但是,如果沒有這句話,那麼程式執行出現錯誤結果 } else //出現數字和'.'之外的任何其他字元,表明非ip地址 return false; } if (j==3 && arr[0]<=255 && arr[1]<=255 && arr[2]<=255 && arr[3]<=255) { //如果是IP地址,那麼肯定有四個欄位,即j==3 return true; } else return false; } void main() { char *str="255.234.234.0"; if(IsIPAddress(str)) cout<<"Is IP address!"<<endl; else cout<<"NOT IP address!"<<endl; }
注:1、測試用例我沒有附上,大家如果有興趣可以自己測試一下,我測了好多都沒問題
2、程式中【注意!!】的地方,我上面明明已經用memset把陣列arr[]都初始化為0了,但是,如果沒有這句話,那麼程式執行出現錯誤結果,還請大家幫忙分析一下
3、對於注2中的問題已經找到問題所在,memset()使用錯誤,應該是memset(arr,0,sizeof(int)*4);程式中已經更正