问题描述:
现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如10.137.17.1,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。
现在需要你用程序来判断IP是否合法。
输入:
输入一个ip地址
输出:
返回判断的结果YES or NO
样例输入:
10.138.15.1
样例输出
YES
#include <iostream> #include <string> #include <algorithm> #include <vector> #include <set> #include <math.h> using namespace std; vector<string> split(string str, string pattern) { string::size_type pos; vector<string> result; str += pattern; int size = str.size(); for (int i = 0; i<size; i++) { pos = str.find(pattern, i); if (pos<size) { std::string s = str.substr(i, pos - i); result.push_back(s); i = pos + pattern.size() - 1; } } return result; } bool isValid(string str) { int value = 0; for (int i = 0; i < str.size(); i++) { if (isdigit(str[i])) { value = value * 10 + str[i] - '0'; } else return false; } if (value <= 255) return true; else return false; } int main(void) { string pattern("."); string str; cin >> str; vector<string> strVec = split(str, pattern); for (int i = 0; i < strVec.size(); i++) { if (!isValid(strVec[i])) { cout << "NO"; return 0; } } cout << "YES"; }