蓝桥杯 1116: IP判断 Easy only once
基本思路:
判断字符,没啥可说的;
关键点:
在判断的时候,不用整体截取在挨个判断,可以边截边判断,便于及时舍去;
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<vector>
#include<string>
#include<math.h>
#include<algorithm>
#include<cstring>
using namespace std;
using std::vector;
vector<string>vec;
int tonumber(string s) {
int n = 0;
for (int i = 0; i < s.size(); i++) {
n = n * 10 + (s[i] - '0');
}
return n;
}
bool chargement() {
if (vec.size() != 4)
return false;
//判断是否有特殊字符;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < vec[i].size(); j++) {
if (vec[i][j]<'0' || vec[i][j]>'9')
return false;
}
}
//判断先导零;
for (int i = 0; i < 4; i++) {
if (vec[i][0] == 0 && vec[i].size() != 1)
return false;
}
//判断是否溢出;
for (int i = 0; i < 4; i++) {
int n = tonumber(vec[i]);
if (n < 0 || n>255)
return false;
}
return true;
}
int main() {
string s;
string last="";
while (cin >> s) {
vec.resize(0);
int index = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '.') {
vec.push_back(s.substr(index, i - index));
index=i+1;
}
}
vec.push_back(s.substr(index, s.size() - index));
if (chargement())
last += 'Y';
else
last += 'N';
}
for (int i = 0; i < last.size(); i++)
cout << last[i] << endl;
//system("pause");
return 0;
}

浙公网安备 33010602011771号