我尝试使用C++ string完成P7911,但是没有成功
查看原帖
我尝试使用C++ string完成P7911,但是没有成功
378418
Chenaknoip楼主2021/11/7 15:04

我的思路:

  1. 如果是服务器,就判断地址是否合法、是否存在;
  2. 如果是用户机,就判断地址是否合法、是否有对应的服务器。

现有问题:

  1. 判断地址合法函数出现问题(总是返回true);

我的代码:

#include <bits/stdc++.h>
using namespace std;
int x[10];
string a;
bool cmp(string a) {
	int cnt = 1, len = a.length(), dt = 0, mh = 0;
	for (int i = 0; i < len; i++) {
		if (a[i] >= '0' && a[i] <= '9') {
			if (x[cnt] == 0 && a[i] == '0') return false;
			x[cnt] = x[cnt] * 10 + a[i] - '0';
		} else {
            if (a[i] == '.') dt++;
            else mh++;
			if (cnt >= 1 && cnt <= 3) {
				if (a[i] != '.') return false;
			} else if (cnt == 4) if (a[i] != ':') return false;
		}
	}
    for (int i = 0; i < 4; i++) {
        if (x[i] > 255) return false;
    }
    if (x[4] > 65535) return false;
	if (cnt > 5) return false;
    if (dt != 3) return false;
    if (mh != 1) return false;
	return true;
}
int n;
vector<string> s;
bool find(string a) {
    for (int i = 0; i < s.size(); i++) {
        if (s[i] == a) return true;
    }
    return false;
}
int num(string a) {
    for (int i = 0; i < s.size(); i++) {
        if (s[i] == a) return i + 1;
    }
    return 0;
}
int main() {
    freopen("network.in", "r", stdin);
    freopen("network.out", "w", stdout);
    cin >> n;
    for (int i = 0; i < n; i++) {
        string type;
        cin >> type;
        if (type == "Server") {
            string ip;
            cin >> ip;
            if (cmp(ip)) {
                cout << "ERR" << endl;
            } else if (find(ip)) {
                cout << "FAIL" << endl;
            } else {
                cout << "OK" << endl;
                s.push_back(ip);
            }
        } else {
            string ip;
            cin >> ip;
            if (cmp(ip)) {
                cout << "ERR" << endl;
            } else if (!find(ip)) {
                cout << "FAIL" << endl;
            } else {
                cout << num(ip) << endl;
            }
        }
    }
    return 0;
}

我的测试数据:

5
Server 192.168.1.1:8080
Server 192.168.1.1:8080
Client 192.168.1.1:8080
Client 192.168.1.1:80
Client 192.168.1.1:99999

预期输出:

OK 
FAIL
1
FAIL
ERR

我的输出:

OK 
FAIL
1
FAIL
FAIL

得分:00

2021/11/7 15:04
加载中...