sscanf小技巧-洛谷P7911 网络连接
sscanf小技巧-洛谷P7911 网络连接
序言
本题解来源:本蒟蒻上课摸鱼 (别学我)
最近学了一个挺好用的函数——sscanf(),结合洛谷P7911 网络连接讲一下。
(点击查看题目)
推荐几首纯音乐,拿走不谢↓
- Bloom of Youth
- Windy Hill
- Love Is Gone
- 所念皆星河
- 这题其实挺简单的, 让不少人 (包括本蒟蒻) 头大并WA掉的主要是这几点:
1 . 把数字和字符 拆开 分开判断
2 . 判断前导0
3 . 查找、判断重复
4 . …
题目分析
- 本题为洛谷 P7911 网络连接
- 题目虽然比较长,但比较简单,耐心看很容易就能看懂
- 输入类型、地址↓
string s, t;cin>>s>>t;
- 若地址不符合要求,输出“ERR”,判断下一个↓
if(!check(t)){cout<<"ERR"<<endl;continue;}
- 若为服务机(Server)↓
if(s == "Server")
- 若地址没有出现过,输出“OK”↓
if(server[t] == 0){server[t] = i;cout<<"OK"<<endl;}
- 若与先前某台已经成功建立连接的服务机的地址相同,输出“FAIL”↓
else{cout<<"FAIL"<<endl;}
- 若为客户机(Client)↓
else
- 若与先前某台已经成功建立连接的服务机的地址相同,输出服务机的地址↓
if(server[t] > 0)cout<<server[t]<<endl;
- 若找不到这样的服务机,则这台客户机无法成功加入连接↓
elsecout<<"FAIL"<<endl;
正文(— _ —)
一、介绍一个函数—— sscanf()
(别看我,我没打错,就是 sscanf
)
头文件 (万能头)↓
#include <bits/stdc++.h>
sscanf 的用法
sscanf
的用法类似一个字符串格式化工具
- 从一个字符串中读进于指定格式相符的数据
char ch[101]; sscanf("12345", "%s", ch); //读入字符串 cout<<ch; //输出12345
- 取指定长度的字符串
char ch[101]; sscanf("12345", "%3s", ch); //取指定长度的字符串 cout<<ch; //输出123
- 取到指定字符为止的字符串
char ch[101]; sscanf("12345abcd", "%[^a]", ch); //读到a cout<<ch; //输出12345
- 取到指定字符集为止的字符串
char ch[101]; sscanf("123m45abcd", "%[^a-z]", ch); //读到m cout<<ch; //输出123
- 补充介绍一个
sprintf()
·既然sscanf
是把字符串拆开,那sprintf
就是把字符串拼起来
这样用↓
char ch[101];
sprintf(ch,"%d.%d.%d.%d:%d",1,2,3,4,5);
cout<<ch; //输出 1.2.3.4:5
二、介绍一种数据结构——map
map
是啥??
就是一个能以任意数据结构为下标的数组。
所以怎么用??
举个栗子:我们要建一个以字符串即 string
为下标、存 int
的名为 a
数组,就可以这样写↓
map<string, int>a;
那么这样存值↓
string str = "-_-";
a[str] = 4;
这样我们就可以直接判断地址是否出现过
是不是很神奇?
三、一个判断前导0的小方法
我们现在已经有了 sscanf()
和sprintf()
,就可以把字符串里的数字拆出来,前导0就会省略,再拼回去,与原字符串比较,如果不同就是有前导0
四、讲完技巧,开始写代码
- 这题思路十分的简单,直接模拟就行
直接上标程↓
#include<bits/stdc++.h>
using namespace std;
int n;
map<string, int>server;
bool check(string ip){int t[6] = {0, -1, -1, -1, -1, -1};int cnt = sscanf(ip.c_str(), "%d.%d.%d.%d:%d", &t[1], &t[2], &t[3], &t[4], &t[5]);if(cnt != 5) return 0;for(int i=1;i<=4;i++)if(t[i] < 0 || t[i] > 255) return 0;if(t[5] < 0 || t[5] > 65536) return 0;char ch[50];sprintf(ch, "%d.%d.%d.%d:%d", t[1], t[2], t[3], t[4], t[5]);if(ip != string(ch)) return 0;return 1;
}
int main(){freopen("network.in", "r", stdin);freopen("network.out", "w", stdout);cin>>n;string s, t;for(int i=1;i<=n;i++){cin>>s>>t;if(!check(t)){cout<<"ERR"<<endl;continue;}if(s == "Server"){if(server[t] == 0){server[t] = i;cout<<"OK"<<endl;}else{cout<<"FAIL"<<endl;}}else{if(server[t] > 0)cout<<server[t]<<endl;elsecout<<"FAIL"<<endl;}}return 0;
}
写在最后
感谢耐心看完这136行的题解!
希望你们能学到东西 (# ^ . ^ #)
( 没用的小知识又增加啦 )
sscanf小技巧-洛谷P7911 网络连接相关推荐
- 【逗老师的小技巧】MacOS重置网络连接的方法
如果MacOS在连接网络的时候出现各种奇怪的问题时,可以尝试重置MacOS的网络配置. 1.打开"Finder(访达)",按住Command+Shift+G,打开"前往文 ...
- 计算机网络系统不可用,网络连接不可用,小编教你电脑网络连接不可用怎么办...
发现"无线网络连接不可用"这个问题很常见,很多人为它而苦恼,作为笔记本的重要组成部分,无线网出了问题,无异于上了战场的士兵拿着坏了的枪一般.那电脑网络连接不可用怎么办?下面,小编给 ...
- 洛谷P3376 网络最大流
不是讲网络流,就是存个板子 另外我的Dinic跑得比EK慢一倍可还行( 附两份比较好的教程,均来自洛谷日报 EK\sf \color{blue}EKEK Dinic\sf \color{blue}Di ...
- KMP算法小总结 洛谷P3375 【模板】KMP字符串匹配
提问:这里有一个长度为n的字符串str1和长度为m的字符串str2(n > = m),问在str1中str2出现了几次? 如果使用暴力求解,一个一个比较,在n和m都极大的情况下将花费非常多的不必 ...
- 小技巧:罗技一个接收器连接多个鼠标或键盘
安装Logitech Unifying™ 优联软件: 1 只接收器 - 6 个设备 最多可以将六个罗技 Unifying™ 优联无线鼠标或键盘连接至一只小巧又节省空间的 Unifying 优联 USB ...
- 如何做好抖音短视频,抖音短视频的几个小技巧:国仁网络资讯
抖音短视频行业近两年异军突起,为自媒体行业带来了全新的发展模式和契机,其实自媒体短视频入门并不难,只要确定一个简单的文案,一台手机就可以创作了,时长一般十几秒到几分钟不等,对于信任来说非常友好. 虽然 ...
- 洛谷3376 网络最大流
题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...
- 洛谷3171 网络吞吐量(网络流)
t开成n结果cur赋值的时候也只赋值到t令人智熄 [题目分析] 好吧我承认这个错误真的呵呵........ 题目有那~~~~~么长,然后画画图这道题就基本看出正解了,再一看数据范围,n<=500 ...
- 洛谷-P1125-笨小猴
[NOIP2008 提高组] 笨小猴 - 洛谷 解题思路: 1.由题可得,输入一个只包含字母的字符串,那么用string str 来表示,判断里面字母出现最多的次数和最少的次数,max和min 2.如 ...
最新文章
- 封神召唤师显示服务器爆满,封神召唤师总是显示无法连接网络
- SecureCRT 绝佳配色方案, 保护你的眼睛
- 点分十进制IP转换为十进制数以及逆变换,JavaScript
- 我对分布式多中心架构的几点看法
- boost::gil::packed_channel_value用法的测试程序
- 有符号位和无符号位。——int8疑问有感
- 五大智能软硬件技术,赋予智慧健康无限可能
- 在MyEclipse中配置Tomcat服务器
- NUC1014 排版题.输出排列成菱形的字母【打印图案】
- [转]WINDOW进程通信的几种方式
- Struts2——(3)ValueStack(值栈)
- Spark SQL运行架构
- 区块链 hyperledger fabric的系统链码有哪些类型 LSCC ESCC VSCC CSCC是什么
- 360面临两线作战----手机安全领域硝烟再起
- APP 基本框架设计
- 30行JS代码带你手写自动回复语音聊天机器人
- BCH硬分叉,又一场“权力的游戏” | 8问大事件
- 我喜欢两个男人。。。
- 鲁豫有约--之分享李连杰的私密生活
- x265-1.7版本-encoder/dpb.cpp注释
热门文章
- linux 7 开启远程桌面,CentOS 7 开启VNC远程桌面
- 新浪微博授权登陆获取个人信息
- 行车记录仪摄像头4线
- 【黑科技】爬虫也可以一键获取 [加载更多] 数据,无编码学爬虫之三。
- 2023年节假日JSON
- MYSQL 最重要的命令
- SpringBoot通过dubbo-spring-boot-starter整合Dubbo出现的问题
- 文智背后的奥秘系列篇——情感分类
- 记一次Redis哨兵机制【主机挂了无法切换其他从机】的问题
- svn: E155019: Can't upgrade as it is not a pre-1.7 work解决办法