蓝桥杯 1116: IP判断 Easy only once

基本思路:

判断字符,没啥可说的;

 

关键点:

在判断的时候,不用整体截取在挨个判断,可以边截边判断,便于及时舍去;

 

#include
#include
#include
#include 
#include
#include
#include
#include
using namespace std;
using std::vector;
vectorvec;

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;
}

  

你可能感兴趣的:(蓝桥杯 1116: IP判断 Easy only once)