我是蒟蒻,求dalao帮助,谢谢
可能是判断的部分有问题,记录显示有“ERR”判断为“FAIL”。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,cnts;
string ip[1005],op,ad;
ll trans(string &s,ll st,ll en){
int num=0;
if(en-st>1 && s[st]=='0'){
return -1;
}
for(ll i=st;i<en;i++){
num=num*10+(s[i]-'0');
}
return num;
}
bool check(string &s){
ll psd[4],cdt=0,psm,cdm=0;
for(ll i=0;i<s.length();i++){
if(cdt>3 || cdm>1){
return false;
}
if(s[i]=='.'){
psd[cdt++]=i;
}else if(s[i]==':'){
if(cdt!=3 || cdm>0){
return false;
}else{
cdm++;
psm=i;
}
}
}
if(cdt!=3 || cdm!=1){
return false;
}
bool flag=true;
for(ll i=0;i<=4;i++){
ll num;
if(i==0){
num=trans(s,0,psd[0]);
if(num<0 || num>255){
flag=false;
}
}else if(i==4){
num=trans(s,psm+1,s.length());
if(num<0 || num>65535){
flag=false;
}
}else if(i==3){
num=trans(s,psd[2]+1,psm);
if(num<0 || num>255){
flag=false;
}
}else{
num=trans(s,psd[i-1]+1,psd[i]);
if(num<0 || num>255){
flag=false;
}
}
if(!flag){
return false;
}
}
return true;
}
int main(){
scanf("%d",&n);
for(ll i=0;i<n;i++){
cin>>op>>ad;
if(check(ad)){
if(op=="Server"){
bool flag=true;
for(ll j=0;j<=i;j++){
if(ip[j]==ad){
printf("FAIL\n");
flag=false;
break;
}
}
if(flag){
ip[i]=ad;
printf("OK\n");
}
}else if(op=="Client"){
bool flag=true;
for(ll j=0;j<=i;j++){
if(ip[j]==ad){
printf("%d\n",j+1);
flag=false;
break;
}
}
if(flag){
printf("FAIL\n");
}
}
}else{
printf("ERR\n");
}
}
return 0;
}