牛客ACM模式标准输入

1、cin

根据cin>>sth 中sth的变量类型读取数据,这里变量类型可以为int,float,char,char*,string等诸多类型。这一输入操作,在遇到结束符(Space、Tab、Enter)就结束,且对于结束符,并不保存到变量中。cin不能读取空格,遇到第一个非空格字符开始读,读取到下一空格字符停止读取,且不会将空格符保存到缓冲区中。cin从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待.

2、cin.get(字符数组名,接收长度,结束符)

其中结束符意味着遇到该符号结束字符串读取,默认为enter,读取的字符个数最多为(长度 - 1),因为最后一个为’\0’。要注意的是,cin.get(字符数组名,接收长度,结束符)操作遇到结束符停止读取,但并不会将结束符从缓冲区丢弃。因此cin.get可以判断回车换行符。cin.get函数有如下几种声明:

int get();
istream& get(char& c);
istream& get(char* s, streamsize n);
istream& get(char* s, streamsize n, char delim);
istream& get(streambuf& sb);
istream& get(streambuf& sb, char delim);

(1)接收一个字符ch=cin.get()或cin.get(char ch),二者等价,看两个例子

cin.get()存在的基本目的,我认为就是为了从c移植到c++的时候,直接用cin.get()代替getchar(),也正因因此,cin.get()的返回值跟其它cin.get成员函数返回cin对象不同,跟getchar()一样返回int。所以cin.get()和C语言的getchar()没什么区别
注意:cin>>读取不到换行符,需要用cin.get()读取换行符后接着读取下一行数据

3、cin.getline(字符数组名,接收长度,结束符)

其用法与cin.get(字符数组名,接收长度,结束符)极为类似。cin.get()当输入的字符串超长时,不会引起cin函数的错误,后面若有cin操作,会继续执行,只是直接从缓冲区中取数据。但是cin.getline()当输入超长时,会引起cin函数的错误,后面的cin操作将不再执行。

4、getline(istream is,string str,结束符)

同样,此处结束符为可选参数(默认依然为enter)。然而,getline()与前面的诸多存在的差别在于,它string库函数下,而非前面的istream流,所有调用前要在前面加入#include。与之对应这一方法读入时第二个参数为string类型,而不再是char*,要注意区别。另外,该方法也不是遇到空白字符(tab, space, enter(当结束符不是默认enter时))就结束输入的,且会丢弃最后一个换行符。

输入为:
2
2
uh hihi hijhioi jahsua
aksjai jhsuahs hisah
  int n, m;cin >> n >> m;unordered_map<string, int> title;unordered_map<string, int> cont;string str;int pos = 0;char ch;cin.get(ch); //cin读取完之后换行符需要读取,否则getline会读取到while (m--){getline(cin, str);istringstream strs(str);while (getline(strs, str, ' ')){title[str]++;}getline(cin, str);istringstream strs2(str);while (getline(strs2, str, ' ')){cont[str]++;}}

或者用第二种方法:

    int n, m;cin >> n >> m;unordered_map<string, int> title;unordered_map<string, int> cont;string str;int pos = 0;char ch;cin.get(ch); //while (m--){while (cin >> str){title[str]++;ch = cin.get();if (ch == '\n'){break;}}while (cin >> str){cont[str]++;ch = cin.get();if (ch == '\n'){break;}}}

5、匿名函数自定义排序

    //自定义排序sort(res.begin(), res.end(), [](pair<int, pair<int, pair<int,                string>>> a, pair<int, pair<int, pair<int, string>>> b){if(a.first==b.first){//总出现相等if(a.second.first==b.second.first){//标题出现相等return a.second.second.first<b.second.second.first;}return a.second.first>b.second.first;} return a.first>b.first;; });

5、while(cin)

当不知道什么时候结束的时候,牛客系统在输入数据结束之后一定会输入文件结束符的。因此可以用while(cin)接受数据,当遇到文件结束符会自动退出while循环。

当从键盘输入一串字符并按回车后,这些字符会首先被送到输入缓冲区中存储。每当按下回车键后,cin.get()就会检测输入缓冲区中是否有了可读的数据。cin.get()还会对键盘上是否有流结束标识的Ctrl-z或者ctrl-d键按下做出检查,其检查的方式有两种,阻塞式以及非阻塞式。
  windows系统一般采用阻塞式检查ctrl-z,Unix/Linux系统下一般采用非阻塞式的检查ctrl-d.
  阻塞式检查方式是指只有在回车键按下之后才对此前是否有ctrl-z组合键按下进行检查。另外,如果输入缓冲区中有可读的数据则不会检测ctrl-z,因为有可读数据,说明还未到流的末尾。需要注意的时,ctrl-z产生的不是一个普通的ascii字符,因此ctrl-z不会跟其它从键盘输入的字符一样能够存放在输入缓冲区中。因此,若要使ctrl-z产生作用,输入ctrl-z之前不应输入任何字符,即输入回车键把之前输入的字符全部送入缓冲区中后,紧接着应输入ctrl-z,然后输入回车键,告知系统检测流结束符ctrl-z.
  非阻塞式是指按下ctrl-d之后立即响应的方式。如果在ctrl-d输入之前已经从键盘输入了字符,则ctrl-d相当于回车,即把这些字符送到了输入缓冲区供读取使用,此时ctrl+d不再起流结束符的作用。若ctrl-d输入之前没有任何键盘输入,则ctrl-d就是流结束的信号。

windows 下ctrl-z使用举例说明如下:

从键盘上输入abcd^z 再输入回车键后,系统处理如下:因为回车的作用,前面的abcd等字符被送到输入缓冲区中,而z不会产生字符,因此不会存储到缓冲区中。这时,cin.get()检测到输入缓冲区中已经有数据存在,就不会检测有无z存在,cin.get()从缓冲中读取相应的数据,如果读取完了,则输入缓冲区重新变为空,cin.get()等待新的输入,可见尽管有ctrl-z输入,但是之前有其它字符,系统并未监测到流结束符。
  因此输入流结束符的条件就是:^z之前不能有任何字符输入(回车键除外),然后再用回车键通知系统做流结束符检测。
  而对于处理算术类型的,任何情况下,只要把文件结束符送到缓冲区,输入流就会检测到并结束接收输入。

牛客ACM模式标准输入相关推荐

  1. 牛客 /acm/problem/13223 竞标赛

    牛客NC13223: 竞标赛 题目大意为: 第一个为小美的参赛积分 对数组中 除了第一个位置以外 进行从小到大排序 然后我们通过大的与大的比较 >> 淘汰较大的 小美一直与 存活的 最小的 ...

  2. 【Java/总结/牛客/ACM赛制】 “中国东信杯”广西大学第四届程序设计竞赛(同步赛)

    文章目录 题目链接 知识一览 题目列表 快输 F Antinomy与金手指(kmp) H Antinomy与法术威力(队列/区间最值) 题目链接 "中国东信杯"广西大学第四届程序设 ...

  3. 牛客ACM赛 B [小a的旅行计划 ]

    链接 B 小a的旅行计划 把\(n\)个数中选任意数分成\(a,b\)两个集合,集合无区别,要求不包含且有交,求方案数.\(n\leq 10^{13}\) 首先讨论\(a,b\)并集是否为全集: 若是 ...

  4. 【Java/补题/牛客/ACM赛制】2021年ICPC国际大学生程序设计竞赛暨陕西省第九届大学生程序设计竞赛(正式赛)

    文章目录 题目链接 知识一览 题目列表 快输 C - GCD(数论分块) 题目链接 2021年ICPC国际大学生程序设计竞赛暨陕西省第九届大学生程序设计竞赛(正式赛) 知识一览 01-数论分块 题目列 ...

  5. 牛客网在线判题系统JavaScript(V8)使用,附美团赛码系统判题系统使用

    牛客ACM模式 一直在刷leetcode的同学,平时一直使用核心代码模式,突然遇到ACM模式,会无从下手,下面教你处理各种输入输出情况. JavaScript作为一种动态语言,没有像C或Java那种频 ...

  6. 牛客面试题ACM模式js

    在牛客网做练习的时候,发现和平时leetcode不同,查了后才知道牛客是acm模式,leetcode是核心代码模式, ACM需要自己定义输入和输出,针对js来说,有两种模式,v8和node 参考官网 ...

  7. JavaScript在线编程输入输出总结|快速上手牛客Javascript_V8 ACM模式

    单行输入输出处理 //读取一行输入内容,并以字符串形式保存 let n=readline(); //对字符串进行处理,输出字符串 console.log(n.split('').reverse().j ...

  8. JavascriptACM模式牛客输入输出

    JavascriptACM模式牛客输入输出 JavascriptACM模式输入输出 Javascript(V8) 处理单行输入 处理多行输入 多行输入且多行输出 输入结果为矩阵 Javascript( ...

  9. 牛客网 桂林电子科技大学第三届ACM程序设计竞赛 D.寻找-树上LCA(树上a到b的路径上离c最近的点)...

    链接:https://ac.nowcoder.com/acm/contest/558/D 来源:牛客网 寻找 小猫在研究树. 小猫在研究树上的距离. 给定一棵N个点的树,每条边边权为1. Q次询问,每 ...

最新文章

  1. 鸿蒙开发者自学,【5月21日鸿蒙公开课】自学鸿蒙 当代大学生的进阶之路
  2. generate报错 make_如何安装opencv_contrib及解决其安装编译问题
  3. 创建Servlet项目(IDEA版)
  4. Quartz 的SB问题 GetNextValidTimeAfter 输出和输出 时区 不同步,好傻的方法?
  5. 微软开源的Web测试和自动化神器 Playwright
  6. [SpringSecurity]web权限方案_用户认证_查询数据库完成认证
  7. JavaFX官方教程(十三)之应用效果
  8. mysql 新建用户无法登陆
  9. Linux二进制实用工具Binutils工具集解析()
  10. 业内指路共享软件:更多机会在移动和海外市场(三)
  11. 猿辅导MSMARCO冠军团队:用MARS模型解决机器阅读任务 | 吃瓜笔记
  12. 油猴管理程序复制百度文库网页内容
  13. 2020年测试面试经历以及面试题大全
  14. 北京大学计算机科学李丰,北京大学
  15. 外汇短线交易者的规则
  16. 谷歌网盘国内下载API
  17. css3怎么做多边形,CSS | 实现有趣的多边形
  18. Python six库介绍和用法
  19. Adaptive Bilateral Filter for Sharpness Enhancement and Noise Removal 阅读理解
  20. 常用css整理2 转自csdn

热门文章

  1. 【今日CV 计算机视觉论文速览 第149期】Tue, 30 Jul 2019
  2. 【微信小程序系列】微信小程序连接后端数据库(SSM)案例
  3. 新概念英语一册语法总结
  4. echarts+vue实现中国地图
  5. 深度学习中的顶层(top-layer)和底层(bottom-layer)
  6. 解决google翻译无法使用
  7. 线性代数学习笔记——行列式的性质及拉普拉斯定理——2. n阶行列式的定义
  8. 湖北省两化融合贯标专项解读,2022年申报奖励补贴以及申报条件汇总
  9. 让汽车软件进入iPhone时代!
  10. 外贸业务员专用的18个英文学习网站!