- 我又回来了
- 被这个代码的输入卡了半个小时
- 我的发量堪忧啊
貌似正经一点的闲聊
还是认真一点吧
- 由于查找和存储都可以用map实现
- 所以只需要弄明白输入合不合法就行
- 其中格式用sscanf实现,返回值就是输入成功的变量数,不为5就是格式不对
- 前导零的辨别可以把那5个数复原成一个字符串再比较
- 具体见代码
#include<bits/stdc++.h>
using namespace std;
bool f(string s){
long long a,b,c,d,e;
if(sscanf(s.c_str() ,"%lld.%lld.%lld.%lld:%lld", &a, &b, &c, &d, &e)!=5)
return 0;
if(a<0||a>255||b<0||b>255||c<0||c>255||d<0||d>255||e<0||e>65535) return 0;
stringstream ss;
ss<<a<<'.'<<b<<'.'<<c<<'.'<<d<<':'<<e;
if(ss.str()!=s)return 0;
return 1;
}
map<string,int> m;
string op,ad;
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>op>>ad;
if(!f(ad)){
printf("ERR\n");
continue;
}
if(op[0]=='S'){
if(m[ad]) printf("FAIL\n");
else{
m[ad]=i;
printf("OK\n");
}
}
else{
if(!m.count(ad))printf("FAIL\n");
else printf("%d\n",m[ad]);
}
}
return 0;
}