sscanf小技巧-洛谷P7911 网络连接


序言

本题解来源:本蒟蒻上课摸鱼 (别学我)
最近学了一个挺好用的函数——sscanf(),结合洛谷P7911 网络连接讲一下。
(点击查看题目)


推荐几首纯音乐,拿走不谢↓

  1. Bloom of Youth
  2. Windy Hill
  3. Love Is Gone
  4. 所念皆星河

- 这题其实挺简单的, 让不少人 (包括本蒟蒻) 头大并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")
  1. 若地址没有出现过,输出“OK”↓
    if(server[t] == 0){server[t] = i;cout<<"OK"<<endl;}
  1. 若与先前某台已经成功建立连接的服务机的地址相同,输出“FAIL”↓
    else{cout<<"FAIL"<<endl;}
  • 若为客户机(Client)↓
else
  1. 若与先前某台已经成功建立连接的服务机的地址相同,输出服务机的地址↓
    if(server[t] > 0)cout<<server[t]<<endl;
  1. 若找不到这样的服务机,则这台客户机无法成功加入连接↓
    elsecout<<"FAIL"<<endl;

正文(— _ —)

一、介绍一个函数—— sscanf()

(别看我,我没打错,就是 sscanf)

头文件 (万能头)↓

#include <bits/stdc++.h>

sscanf 的用法

  • sscanf
    的用法类似一个字符串格式化工具
  1. 从一个字符串中读进于指定格式相符的数据

    char ch[101];
    sscanf("12345", "%s", ch);  //读入字符串
    cout<<ch;  //输出12345
    
  2. 取指定长度的字符串
    char ch[101];
    sscanf("12345", "%3s", ch);  //取指定长度的字符串
    cout<<ch;  //输出123
    
  3. 取到指定字符为止的字符串
    char ch[101];
    sscanf("12345abcd", "%[^a]", ch);  //读到a
    cout<<ch;  //输出12345
    
  4. 取到指定字符集为止的字符串
    char ch[101];
    sscanf("123m45abcd", "%[^a-z]", ch);  //读到m
    cout<<ch;  //输出123
    
  5. 补充介绍一个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 网络连接相关推荐

  1. 【逗老师的小技巧】MacOS重置网络连接的方法

    如果MacOS在连接网络的时候出现各种奇怪的问题时,可以尝试重置MacOS的网络配置. 1.打开"Finder(访达)",按住Command+Shift+G,打开"前往文 ...

  2. 计算机网络系统不可用,网络连接不可用,小编教你电脑网络连接不可用怎么办...

    发现"无线网络连接不可用"这个问题很常见,很多人为它而苦恼,作为笔记本的重要组成部分,无线网出了问题,无异于上了战场的士兵拿着坏了的枪一般.那电脑网络连接不可用怎么办?下面,小编给 ...

  3. 洛谷P3376 网络最大流

    不是讲网络流,就是存个板子 另外我的Dinic跑得比EK慢一倍可还行( 附两份比较好的教程,均来自洛谷日报 EK\sf \color{blue}EKEK Dinic\sf \color{blue}Di ...

  4. KMP算法小总结 洛谷P3375 【模板】KMP字符串匹配

    提问:这里有一个长度为n的字符串str1和长度为m的字符串str2(n > = m),问在str1中str2出现了几次? 如果使用暴力求解,一个一个比较,在n和m都极大的情况下将花费非常多的不必 ...

  5. 小技巧:罗技一个接收器连接多个鼠标或键盘

    安装Logitech Unifying™ 优联软件: 1 只接收器 - 6 个设备 最多可以将六个罗技 Unifying™ 优联无线鼠标或键盘连接至一只小巧又节省空间的 Unifying 优联 USB ...

  6. 如何做好抖音短视频,抖音短视频的几个小技巧:国仁网络资讯

    抖音短视频行业近两年异军突起,为自媒体行业带来了全新的发展模式和契机,其实自媒体短视频入门并不难,只要确定一个简单的文案,一台手机就可以创作了,时长一般十几秒到几分钟不等,对于信任来说非常友好. 虽然 ...

  7. 洛谷3376 网络最大流

    题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...

  8. 洛谷3171 网络吞吐量(网络流)

    t开成n结果cur赋值的时候也只赋值到t令人智熄 [题目分析] 好吧我承认这个错误真的呵呵........ 题目有那~~~~~么长,然后画画图这道题就基本看出正解了,再一看数据范围,n<=500 ...

  9. 洛谷-P1125-笨小猴

    [NOIP2008 提高组] 笨小猴 - 洛谷 解题思路: 1.由题可得,输入一个只包含字母的字符串,那么用string str 来表示,判断里面字母出现最多的次数和最少的次数,max和min 2.如 ...

最新文章

  1. 封神召唤师显示服务器爆满,封神召唤师总是显示无法连接网络
  2. SecureCRT 绝佳配色方案, 保护你的眼睛
  3. 点分十进制IP转换为十进制数以及逆变换,JavaScript
  4. 我对分布式多中心架构的几点看法
  5. boost::gil::packed_channel_value用法的测试程序
  6. 有符号位和无符号位。——int8疑问有感
  7. 五大智能软硬件技术,赋予智慧健康无限可能
  8. 在MyEclipse中配置Tomcat服务器
  9. NUC1014 排版题.输出排列成菱形的字母【打印图案】
  10. [转]WINDOW进程通信的几种方式
  11. Struts2——(3)ValueStack(值栈)
  12. Spark SQL运行架构
  13. 区块链 hyperledger fabric的系统链码有哪些类型 LSCC ESCC VSCC CSCC是什么
  14. 360面临两线作战----手机安全领域硝烟再起
  15. APP 基本框架设计
  16. 30行JS代码带你手写自动回复语音聊天机器人
  17. BCH硬分叉,又一场“权力的游戏” | 8问大事件
  18. 我喜欢两个男人。。。
  19. 鲁豫有约--之分享李连杰的私密生活
  20. x265-1.7版本-encoder/dpb.cpp注释

热门文章

  1. linux 7 开启远程桌面,CentOS 7 开启VNC远程桌面
  2. 新浪微博授权登陆获取个人信息
  3. 行车记录仪摄像头4线
  4. 【黑科技】爬虫也可以一键获取 [加载更多] 数据,无编码学爬虫之三。
  5. 2023年节假日JSON
  6. MYSQL 最重要的命令
  7. SpringBoot通过dubbo-spring-boot-starter整合Dubbo出现的问题
  8. 文智背后的奥秘系列篇——情感分类
  9. 记一次Redis哨兵机制【主机挂了无法切换其他从机】的问题
  10. svn: E155019: Can't upgrade as it is not a pre-1.7 work解决办法