这题目困惑的地方在于,有很多地方没有涉及到,不知道要不要筛选。
总之没什么太大意义,唯一看点就是双指针得出每两个 .
之间的整数了。
#include <bits/stdc++.h> using namespace std; int main() { string s; while(cin >> s){ bool flag = true; int cnt = 0; int i = 0; int j = 0; while(flag and i < s.size() and j < s.size()){ while (flag and i < s.size() and !isdigit(s[i])) { if (s[i] != '.') { flag = false; } j=++i; } while (flag and j < s.size() and isdigit(s[j])) {j++;} cnt++; if (flag and cnt > 4) flag=false; // cout << s[i] << " " << i << " " << j << endl; if (flag and s[i] == '0' and (j-i)!=1) flag = false; if (flag and (stoi(s.substr(i, j-i)) < 0 or stoi(s.substr(i, j-i)) > 255)) flag = false; i=++j; } if(cnt!=4) flag = false; if (flag) cout << "YES" << endl; else cout << "NO" << endl; } return 0; } // 64 位输出请用 printf("%lld")