75分求助
查看原帖
75分求助
481337
Pratty楼主2023/10/7 12:56
#include <bits/stdc++.h>
using namespace std;
int n;
char op[100], ad[100];
vector<string> vt;
vector<int> bian;
//判断数字位数
bool wei(char s[100]) {
	int sum = 0;
	for (int i = 0; i < (int)strlen(s); i++) {
		if (s[i] >= '0' && s[i] <= '9') {
			sum++;
		} else {
			if (sum > 5) {
				return false;
			}
			sum = 0;
		}
	}
	return true;
}
//判断格式和数字大小
bool ge(char s[100]) {
	vector<int> vt;
	vector<char> ch;
	int num = 0;
	for (int i = 0; i < (int)strlen(s); i++) {
		if (s[i] >= '0' && s[i] <= '9') {
			num = num * 10 + s[i] - '0';
		} else {
			vt.push_back(num);
			ch.push_back(s[i]);
			num = 0;
		}
	}
	vt.push_back(num);
	if (vt.size() != 5 || ch.size() != 4) return false;
	for (int i = 0; i < (int)vt.size() - 1; i++) {
		if (!(vt[i] >= 0 && vt[i] <= 255)) {
			return false;
		}
	}
	if (!(vt[vt.size() - 1] >= 0 && vt[vt.size() - 1] <= 65535)) {
		return false;
	}
	for (int i = 0; i < (int)ch.size() - 1; i++) {
		if (ch[i] != '.') {
			return false;
		}
	}
	if (ch[ch.size() - 1] != ':') {
		return false;
	}
	return true;
}
//判断前导0 
bool dao(char s[100]) {
	for (int i = 0; i < (int)strlen(s); i++) {
		if (s[i] == '0' && s[i + 1] >= '0' && s[i + 1] <= '9') {
			return false;
		} else {
			while (i < (int)strlen(s)) {
				if (s[i] >= '0' && s[i] <= '9') i++;
				else break;
			}
		}
	}
	return true;
}
//判断数字和符号的顺序
bool shun(char s[100]) { 
	for (int i = 0; i < (int)strlen(s); i++) {
		if (!(s[i] >= '0' && s[i] <= '9')) {
			return false;
		}
		if (s[i + 1] == ':' || s[i + 1] == '.') {
			i++;
		}
	}
	return true;
}
bool check(char s[100]) {
	if (wei(s) && ge(s) && dao(s) && shun(s)) {
		return true;
	}
	return false;
}
int main() {
	scanf("%d", &n);
	int id = 0;
	while (n--) {
		scanf("%s%s", op, ad);
		id++;
		if (!check(ad)) {
			printf("ERR\n");
			continue;
		}
		if (op[0] == 'S') {//Server
			int flag = 1;
			for (int i = 0; i < (int)vt.size(); i++) {
				if (vt[i] == ad) {
					flag = -1;
					break;
				}
			}
			if (flag == 1) {
				vt.push_back(ad);
				bian.push_back(id);
				printf("OK\n");
			} else {
				printf("FAIL\n");
			}
		} else {//Client
			int flag = -1, ID = -1;
			for (int i = 0; i < (int)vt.size(); i++) {
				if (vt[i] == ad) {
					flag = 1;
					ID = bian[i];
					break;
				}
			}
			if (flag == 1) {
				printf("%d\n", ID);
			} else {
				printf("FAIL\n");
			}
		}
	}
	return 0;
}

有没有大佬能帮我看看怎么回事,7575 分,挂了 #13 #14 #19 #20 #21 55 个点。

2023/10/7 12:56
加载中...