2021年CSP-J-T3-网络连接(network)
2021年CSP-J-T3-网络连接(network)
题目:
示例2
输入
10
Server 192.168.1.1:80
Client 192.168.1.1:80
Client 192.168.1.1:8080
Server 192.168.1.1:80
Server 192.168.1.1:8080
Server 192.168.1.999:0
Client 192.168.1.1.8080
Client 192.168.1.1:8080
Client 192.168.1.1:80
Client 192.168.1.999:0
1
2
3
4
5
6
7
8
9
10
11
输出
OK
1
FAIL
FAIL
OK
ERR
ERR
5
1
ERR
1
2
3
4
5
6
7
8
9
10
思路
题目思路比较简单,复杂的主要是数据的校验,字符如何判断~~(之前没咋写,很痛苦的自己想了很久,效果不大,服了)~~
由于连接成功需要服务器编号,所以需要记录服务器的地址和编号,可以考虑结构体,但是结构体就需要每次都要遍历,不太方便,数据量大也可能会超时。所以考虑map来存数据,因为map的建必须唯一,所以没必要所有的服务器都存,只需要把不重复的数据放入map即可。
判断是否符合规范,是否有前导0,是否数据在0-255 最后一个数据<0-999999 ,这部分可以用sscanf来处理数据,也可以用stringstream处理
服务机判断是否重复,重复则为fail,
客服机连接成功为电脑号数,没连上则为falil
代码
#include<bits/stdc++.h>
using namespace std;
//判断是否符合要求
bool check(string s0){
long long a,b,c,d,e;
//解析得到数字部分 也可以直接用stringstream来处理
// stringstream t(s0);
//char m;
//stringstream t(s0);
// t>>a >>m>> b>>m>> c >>m>> d>>m>>e;
sscanf(s0.c_str(), “%lld.%lld.%lld.%lld:%lld”, &a,&b,&c,&d,&e);
if (a < 0 || a > 255 || b < 0 || b > 255 || c < 0 || c > 255 || d < 0 || d > 255 || e < 0 || e > 65535)
return false;
//解析符号
stringstream t;
t << a << ‘.’ << b << ‘.’ << c << ‘.’ << d << ‘:’ << e;
return t.str() == s0;
}
int main(){
int k;
string s,s1,s2,s3;
map <string,int> m;
cin>>k;
for(int i=1;i<=k;i++){
cin>>s1>>s2;
//先判断
if(check(s2)==false){
cout<<“ERR”<<endl;
continue;
}
if(s1==”Server”){
if(m.count(s2)!=0){ //服务器重复
cout<<“FAIL”<<endl;
}else{
m[s2]=i;//插入不重复的服务器就行了
cout<<“OK”<<endl;
}
}else{
if(m.count(s2)==0){ //服务器不存在
cout<<“FAIL”<<endl;
}else{
cout<<m[s2]<<endl;
}
}
}
//检查map数据
// map<string,int>::iterator it;
// for(it=m.begin();it!=m.end();it++){
// cout<<it->first<<” “<<it->second<<endl;
// }
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
**
补充sscanf
sscanf
在C语言中,sscanf函数是一个强大的字符串格式化函数,用于从字符串中按照指定的格式解析数据。
它类似于scanf函数,但不是从标准输入流读取数据,而是从字符串中提取数据。
sscanf函数可以根据格式字符串指定的规则,将字符串中的数据提取出来并存储到对应的变量中。
sscanf函数只会从字符串中解析数据,不会对字符串进行修改。
sscanf函数的语法如下:
int sscanf(const char* str, const char* format, ,,,);
str:要解析的输入字符串。
format:格式字符串,指定了要匹配的格式规则。
…:可变参数列表,用于接收解析后的数据。!!!必须是地址
1
2
3
4
5
解析简单的数据类型
读取字符串时由于%s格式符在遇到空格、制表符或换行符时才停止读取,
c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同.是一个临时指针,不能直接用来赋值
这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。
//将字符串s解析为整数,并将结果存储在变量num中。
strinf s=’42’;
int num;
sscanf(“42”, “%d”, &num);
string buf;
sscanf(“Hello World”, “%s”, &buf);
printf(“%s”,&buf);
//解析字符串
string buf,b=”Hello World”;
sscanf(b.c_str(), “%s”, &buf);
printf(“%s”,&buf);
//使用
string s=”1234″;
strcpy(c,s.c_str());
1
2
3
4
5
6
7
8
9
10
11
12
13
14
解析多个数据
int a, b;
sscanf(“10 20”, “%d %d”, &a, &b);
1
2
返回值
sscanf函数返回成功解析的数据项的个数。如果解析失败或没有匹配的数据项,则返回0。
**
#include<bits/stdc++.h>
using namespace std;
//判断是否符合要求
bool check(string s0){
long long a,b,c,d,e;
//解析得到数字部分 也可以直接用stringstream来处理
// stringstream t(s0);
//char m;
//stringstream t(s0);
// t>>a >>m>> b>>m>> c >>m>> d>>m>>e;
sscanf(s0.c_str(), "%lld.%lld.%lld.%lld:%lld", &a,&b,&c,&d,&e);
if (a < 0 || a > 255 || b < 0 || b > 255 || c < 0 || c > 255 || d < 0 || d > 255 || e < 0 || e > 65535)
return false;
//解析符号
stringstream t;
t << a << '.' << b << '.' << c << '.' << d << ':' << e;
return t.str() == s0;
}
int main(){
int k;
string s,s1,s2,s3;
map <string,int> m;
cin>>k;
for(int i=1;i<=k;i++){
cin>>s1>>s2;
//先判断
if(check(s2)==false){
cout<<"ERR"<<endl;
continue;
}
if(s1=="Server"){
if(m.count(s2)!=0){ //服务器重复
cout<<"FAIL"<<endl;
}else{
m[s2]=i;//插入不重复的服务器就行了
cout<<"OK"<<endl;
}
}else{
if(m.count(s2)==0){ //服务器不存在
cout<<"FAIL"<<endl;
}else{
cout<<m[s2]<<endl;
}
}
}
//检查map数据
// map<string,int>::iterator it;
// for(it=m.begin();it!=m.end();it++){
// cout<<it->first<<" "<<it->second<<endl;
// }
return 0;
}
- 海报
免责声明:本站除原创代码外的资源均收集于网络,不保证代码的完整性和可用性,只做学习和交流使用,版权归原作者所有,请在下载后24小时之内自觉删除。若作商业用途,请购买正版,由于未及时购买正版授权发生的侵权行为,与本站无关。本站的内容如果侵犯了您的权益,请及时告知我们,我们即刻处理!
少儿编程课程 儿童编程教育 编程启蒙班 青少年编程培训 Scratch编程学习 Python少儿编程 机器人编程教育 编程思维训练 编程游戏化教学 在线少儿编程平台 儿童编程软件推荐 编程竞赛准备 编程兴趣班 逻辑思维与编程 少儿编程教材 编程与STEM教育 编程技能培养 编程语言入门(如:JavaScript少儿版) 家长如何选择少儿编程课 编程对孩子未来的影响 编程项目实践 编程与创造力培养 编程思维在日常生活中的应用 编程教育专家观点 编程教育趋势分析 少儿编程社区 编程夏令营 编程冬令营 编程学习路线图 编程证书考试 少儿编程启蒙 儿童图形化编程(如Scratch编程) 青少年Python编程 编程基础班(针对小学生) 编程进阶课程(适合高年级学生) 机器人编程工作坊 AI启蒙编程课 逻辑思维编程游戏 编程与数学能力提升 编程思维训练营 编程解决问题的能力培养 在线互动编程课堂 编程项目实战演练 编程创意工坊 编程教育APP推荐 编程教育论坛与社区 编程兴趣小组 编程竞赛辅导 编程证书考试准备 编程教育政策解读 编程教育家长指南 编程与跨学科学习(STEM/STEAM) 编程与创新能力培养 编程与未来职业规划 编程教育师资培训 编程教育研究成果分享 编程教育行业标准 编程教育市场动态 编程教育投资前景 编程教育公益项目
微点点-专业的知识付费平台 » 2021年CSP-J-T3-网络连接(network)
少儿编程课程 儿童编程教育 编程启蒙班 青少年编程培训 Scratch编程学习 Python少儿编程 机器人编程教育 编程思维训练 编程游戏化教学 在线少儿编程平台 儿童编程软件推荐 编程竞赛准备 编程兴趣班 逻辑思维与编程 少儿编程教材 编程与STEM教育 编程技能培养 编程语言入门(如:JavaScript少儿版) 家长如何选择少儿编程课 编程对孩子未来的影响 编程项目实践 编程与创造力培养 编程思维在日常生活中的应用 编程教育专家观点 编程教育趋势分析 少儿编程社区 编程夏令营 编程冬令营 编程学习路线图 编程证书考试 少儿编程启蒙 儿童图形化编程(如Scratch编程) 青少年Python编程 编程基础班(针对小学生) 编程进阶课程(适合高年级学生) 机器人编程工作坊 AI启蒙编程课 逻辑思维编程游戏 编程与数学能力提升 编程思维训练营 编程解决问题的能力培养 在线互动编程课堂 编程项目实战演练 编程创意工坊 编程教育APP推荐 编程教育论坛与社区 编程兴趣小组 编程竞赛辅导 编程证书考试准备 编程教育政策解读 编程教育家长指南 编程与跨学科学习(STEM/STEAM) 编程与创新能力培养 编程与未来职业规划 编程教育师资培训 编程教育研究成果分享 编程教育行业标准 编程教育市场动态 编程教育投资前景 编程教育公益项目
微点点-专业的知识付费平台 » 2021年CSP-J-T3-网络连接(network)