笑死 照着测试案例试出来的 排除个两三种情况直接就过了
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
bool is_legal(string s) {
if(s.size() > 1 && s[0] == '0') return false; //排除01、02这种不合法数字
for(const char& c: s) {
if(!isdigit(c)) return false; //排除含有不是数字的字符 例如排除+2 +3
}
return true;
}
int main() {
string ip;
cin >> ip;
stringstream ss(ip);
vector<int> nums;
string token;
while(getline(ss, token, '.')) {
if(token.empty()) { //排除字符为空的情况例如".1.2.3" 第一个字符token就是空
cout << "NO" << endl;
return 0;
}
if(!is_legal(token)) {
cout << "NO" << endl;
return 0;
}
nums.push_back(stoi(token));
}
if(nums.size() != 4) {
cout << "NO" << endl;
return 0;
}
for(const int& n: nums) {
if(n < 0 || n > 255) {
cout << "NO" << endl;
return 0;
}
}
cout << "YES" << endl;
return 0;
}



京公网安备 11010502036488号