【C++】判斷IP地址有效性
阿新 • • 發佈:2019-02-09
/* 功能: 判斷IP地址是否有效 介面函式: booli sIPAddressValid ( const char * pszIPAddr ) 輸入: pszIPAddr 字串 輸出: true 有效的IP地址,false,無效的IP地址 約束: 1.輸入IP為XXX.XXX.XXX.XXX格式 2.字串兩端含有空格認為是合法IP 3.字串中間含有空格認為是不合法IP 4.類似於 01.1.1.1, 1.02.3.4 IP子段以0開頭為不合法IP 5.子段為單個0 認為是合法IP,0.0.0.0也算合法I */ #include <iostream> #include <cstring> using namespace std; bool isIPAddressValid(const char* pszIPAddr) { if (!pszIPAddr) return false; //若pszIPAddr為空 char IP1[100],cIP[4]; int len = strlen(pszIPAddr); int i = 0,j=len-1; int k, m = 0,n=0,num=0; //去除首尾空格(取出從i-1到j+1之間的字元): while (pszIPAddr[i++] == ' '); while (pszIPAddr[j--] == ' '); for (k = i-1; k <= j+1; k++) { IP1[m++] = *(pszIPAddr + k); } IP1[m] = '\0'; char *p = IP1; while (*p!= '\0') { if (*p == ' ' || *p<'0' || *p>'9') return false; cIP[n++] = *p; //儲存每個子段的第一個字元,用於之後判斷該子段是否為0開頭 int sum = 0; //sum為每一子段的數值,應在0到255之間 while (*p != '.'&&*p != '\0') { if (*p == ' ' || *p<'0' || *p>'9') return false; sum = sum * 10 + *p-48; //每一子段字串轉化為整數 p++; } if (*p == '.') { if ((*(p - 1) >= '0'&&*(p - 1) <= '9') && (*(p + 1) >= '0'&&*(p + 1) <= '9'))//判斷"."前後是否有數字,若無,則為無效IP,如“1.1.127.” num++; //記錄“.”出現的次數,不能大於3 else return false; }; if ((sum > 255) || (sum > 0 && cIP[0] =='0')||num>3) return false;//若子段的值>255或為0開頭的非0子段或“.”的數目>3,則為無效IP if (*p != '\0') p++; n = 0; } if (num != 3) return false; return true; } void main() { char IP[] = " 254.1.1.1 "; //char IP[100]; //cin >> IP; bool tf = isIPAddressValid(IP); cout << tf<<endl; system("pause"); }