判断IPv4字符串合法性

来源:互联网 发布:超级玛丽java代码 编辑:程序博客网 时间:2024/05/16 05:36

点分十进制数值无前导零(0)。soj1103 AC。


#include <iostream>#include <string>using namespace std;int read_digits(string s, int idx){int l = s.length(), i = idx;int d = 0;for (; i < l; i++){if (s[i] >= '0' && s[i] <= '9'){if (i - idx >= 3) return -1;if (i - idx > 0 && d == 0) return -1; // prefix 0d = 10 * d + (s[i] - '0');if (d > 255) return -1;}else if (s[i] == '.'){if (i == idx) return -1;return i;}else return -1;}return i;}bool isLegal(string s){int l = s.length(), i = 0, j = 0;i = read_digits(s, i);if (i == -1 || i >= l) return false;i = read_digits(s, i + 1);if (i == -1 || i >= l) return false;i = read_digits(s, i + 1);if (i == -1 || i >= l) return false;j = i + 1;i = read_digits(s, i + 1);if (i == -1 || i < l || i == j) return false;return true;}int main(){string s;while (cin >> s)cout << (isLegal(s) ? "YES" : "NO") << endl;return 0;}

0 0
原创粉丝点击