C++ ACM模式输入输出

C++ ACM模式输入输出

以下我们都以求和作为题目要求,来看一下各种输入输出应该怎么写。

1 只有一个或几个输入

输入样例:

3 5 7

输入输出模板:

int main() {int a, b, c;// 接收有限个输入cin >> a >> b >> c;// 输出结果cout << a+b+c << endl;
}

2 先给元素个数,再给元素

先给行数T,再给出T行

输入样例:

3
3 5 7
6 8 9
12 9 5

输入输出模板:

int main() {int T;vector<int> res;// 拿到输入行数Tcin >> T;// 接收T行输入while (T--) {int a, b, c;cin >> a >> b >> c;res.push_back(a+b+c);}// 输出结果for (int n : res) {cout << n << endl;}
}

先给数组元素个数,再给一行数组

n, m分别是接下来要给的两个数组元素的个数,输入样例:

5 2
1 4 2 6 5
2 3

接收输入代码:

int main() {int n, m;cin >> n >> m;vector<int> nums(n);for (int i=0; i<n; ++i) cin >> nums[i];vector<int> lens(m);for (int i=0; i<m; ++i) cin >> lens[i];
}

3 多组输入,读到文件结束符EOF为止

不直接告知有多少组输入,而是由EOF来判断。

方法一

cin 读到有数据输入时会返回非0,而读到文件结束符时会返回0,结束while循环。

int main() {int a, b;vector<int> res;while (cin >> a >> b) {res.push_back(a+b);}
}

方法二

scanf 读到文件结束符时会返回-1,而-1的补码表示恰好是全1,从而用按位取反得到0,此时结束 while 循环。

int main() {int a, b;vector<int> res;while (~scanf("%d%d", &a, &b)) {res.push_back(a+b);}
}

4 字符串的输入

同样有 cinscanf 两种方法

方法一

int main() {const int N = 100;char s[N];scanf("%s", s);
}

方法二:

int main() {string s;cin >> s;cout << s << endl;
}

字符串的输入有几点需要注意:

  • C/C++ 中读入的字符串时包含结束符 \0 的,我们需要的字符数组的长度要比真正的字符数加一;
  • cinscanf 两种读入方式都会忽略行首和行位的空格。

5 格式化输入scanf

情况一

当我们面对这样的字符串输入:214+1352,要来计算两数之和时,cin 就不好使了。需要我们的格式化输入 scanf

int main() {int a, b;scanf("%d+%d", &a, &b);cout << a+b << endl;
}

情况二

如果我们会接收到一排数字,而我们想要计算其中每单个数字的和,我们也可以借助格式化输入的 %1d 来实现,它能一位一位地读入标准输入:

int main() {int a;int sum = 0;while (~scanf("%1d", &a))sum += a;cout << sum << endl;
}

标准化输入函数 scanf 还有许多奇妙的用法,有兴趣可以自行查阅相关资料。

6 ASCII码

  1. 可以根据 ASCII 码的区间来判断某个字符是数字还是大小写字母等(比如通过与 'a''z'等 ASCII 码值的大小关系)。
  2. 根据数字字符的 ASCII 码得到数字本身的值:减去 0 的 ASCII 码 char c='3'; int a = c-'0',整型变量 a 的值为 3。

7 整行读取字符串

当我们不确定一行中是否有空格等特殊字符,我们可以使用 getline 进行整行读取:

int main() {string s;getline(cin, s);cout << s << endl;
}

默认以回车作为结束,如果需要自定义,可:

getline(cin, s, '?');

补充知识

string与char数组

  1. char[] 在C/C++中均可用,string仅在C++中可用,且需要 #include <string>,一般称 char[] 为 C 风格的字符串,称 string 为 C++ 风格的字符串
  2. string 通常用 cin 读入,char[] 通常用 scanf 读入。scanf 不可以用来读入 string
  3. char[] 构造 string:string str(s);
  4. string 转换为 char[]:s = str.c_str();
  5. 一般直接 cin 读取 string 会很慢,可以读到 char[] 中,再构造为 string

printf/scanf 与 cout/cin

在读取数据量巨大(经验值为大于1e5个正数以上)时,cin 会很慢,这是因为 cin/cout 需要与 scanf/printf 同步。

解决方法:

  1. 改用 scanf/printf

  2. 关闭同步,改善效率(有的编译器可行,有的无效)

    cin.tie(0); cout.tie(0); ios::sync_with_stdio(0);
    
  3. cout << endl; 除了换行之外,还会清空缓存区,而清空缓存区这件事情会耗时很久,因此为了提高速度,一般直接:cout << "\n";,会快很多

保留小数位数

  1. 如保留 3 位小数:printf("%.4f\n", a);, 此种方法会自动的四舍五入。
  2. 一位小数四舍五入成整数:float a = 2.7; printf("%d\n", int(a+0.5));

Ref:

https://www.bilibili.com/video/BV1ri4y1L7f7?from=search&seid=11052128712667700362&spm_id_from=333.337.0.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CVE-2017-10271 WebLogic XMLDecoder反序列化漏洞

漏洞产生原因&#xff1a; CVE-2017-10271漏洞产生的原因大致是Weblogic的WLS Security组件对外提供webservice服务&#xff0c;其中使用了XMLDecoder来解析用户传入的XML数据&#xff0c;在解析的过程中出现反序列化漏洞&#xff0c;导致可执行任意命令。攻击者发送精心构造的…

树莓派摄像头 C++ OpenCV YoloV3 实现实时目标检测

树莓派摄像头 C OpenCV YoloV3 实现实时目标检测 本文将实现树莓派摄像头 C OpenCV YoloV3 实现实时目标检测&#xff0c;我们会先实现树莓派对视频文件的逐帧检测来验证算法流程&#xff0c;成功后&#xff0c;再接入摄像头进行实时目标检测。 先声明一下笔者的主要软硬件配…

【实战】记录一次服务器挖矿病毒处理

信息收集及kill&#xff1a; 查看监控显示长期CPU利用率超高&#xff0c;怀疑中了病毒 top 命令查看进程资源占用&#xff1a; netstat -lntupa 命令查看有无ip进行发包 netstat -antp 然而并没有找到对应的进程名 查看java进程和solr进程 ps aux &#xff1a;查看所有进程…

ag 搜索工具参数详解

ag 搜索工具参数详解 Ag 是类似ack&#xff0c; grep的工具&#xff0c;它来在文件中搜索相应关键字。 官方列出了几点选择它的理由&#xff1a; 它比ack还要快 &#xff08;和grep不在一个数量级上&#xff09;它会忽略.gitignore和.hgignore中的匹配文件如果有你想忽略的文…

CVE-2013-4547 文件名逻辑漏洞

搭建环境&#xff0c;访问 8080 端口 漏洞说明&#xff1a; Nginx&#xff1a; Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;在BSD-like 协议下发行。其特点是占有内存少&#xff0c;并发能力强&#xf…

CMake指令入门 ——以构建OpenCV项目为例

CMake指令入门 ——以构建OpenCV项目为例 转自&#xff1a;https://blog.csdn.net/sandalphon4869/article/details/100589747 一、安装 sudo apt-get install cmake安装好后&#xff0c;输入 cmake -version如果出现了cmake的版本显示&#xff0c;那么说明安装成功 二、c…

CVE-2017-7529Nginx越界读取缓存漏洞POC

漏洞影响 低危&#xff0c;造成信息泄露&#xff0c;暴露真实ip等 实验内容 漏洞原理 通过查看patch确定问题是由于对http header中range域处理不当造成&#xff0c;焦点在ngx_http_range_parse 函数中的循环&#xff1a; HTTP头部range域的内容大约为Range: bytes4096-81…

Linux命令行性能监控工具大全

Linux命令行性能监控工具大全 作者&#xff1a;Arnold Lu 原文&#xff1a;https://www.cnblogs.com/arnoldlu/p/9462221.html 关键词&#xff1a;top、perf、sar、ksar、mpstat、uptime、vmstat、pidstat、time、cpustat、munin、htop、glances、atop、nmon、pcp-gui、collect…

Weblogic12c T3 协议安全漏洞分析【CVE-2020-14645 CVE-2020-2883 CVE-2020-14645】

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 关注公众号&#xff1a;b1gpig信息安全&#xff0c;文章推送不错过 ## 前言 WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAV…

Getshell总结

按方式分类&#xff1a; 0x01注入getshell&#xff1a; 0x02 上传 getwebshell 0x03 RCE getshell 0x04 包含getwebshell 0x05 漏洞组合拳getshell 0x06 系统层getcmdshell 0x07 钓鱼 getcmdshell 0x08 cms后台getshell 0x09 红队shell竞争分析 0x01注入getshell&#xff1a;…

编写可靠bash脚本的一些技巧

编写可靠bash脚本的一些技巧 原作者&#xff1a;腾讯技术工程 原文链接&#xff1a;https://zhuanlan.zhihu.com/p/123989641 写过很多 bash 脚本的人都知道&#xff0c;bash 的坑不是一般的多。 其实 bash 本身并不是一个很严谨的语言&#xff0c;但是很多时候也不得不用。以下…

python 到 poc

0x01 特殊函数 0x02 模块 0x03 小工具开发记录 特殊函数 # -*- coding:utf-8 -*- #内容见POC.demo; POC.demo2 ;def add(x,y):axyprint(a)add(3,5) print(------------引入lambad版本&#xff1a;) add lambda x,y : xy print(add(3,5)) #lambda函数,在lambda函数后面直接…

protobuf版本常见问题

protobuf版本常见问题 许多软件都依赖 google 的 protobuf&#xff0c;我们很有可能在安装多个软件时重复安装了多个版本的 protobuf&#xff0c;它们之间很可能出现冲突并导致在后续的工作中出现版本不匹配之类的错误。本文将讨论笔者在使用 protobuf 中遇到的一些问题&#…

CMake常用命令整理

CMake常用命令整理 转自&#xff1a;https://zhuanlan.zhihu.com/p/315768216 CMake 是什么我就不用再多说什么了&#xff0c;相信大家都有接触才会看一篇文章。对于不太熟悉的开发人员可以把这篇文章当个查找手册。 1.CMake语法 1.1 指定cmake的最小版本 cmake_minimum_r…

CVE-2021-41773 CVE-2021-42013 Apache HTTPd最新RCE漏洞复现 目录穿越漏洞

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; CVE-2021-41773漏洞描述&#xff1a; Apache HTTPd是Apache基金会开源的一款流行的HTTP服务器。2021年10月8日Apache HTTPd官方发布安全更新&#xff0c;披…

SSRF,以weblogic为案例

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 复习一下ssrf的原理及危害&#xff0c;并且以weblog的ssrf漏洞为案例 漏洞原理 SSRF(Server-side Request Forge, 服务端请求伪造) 通常用于控制web进而…

C++11 右值引用、移动语义、完美转发、万能引用

C11 右值引用、移动语义、完美转发、引用折叠、万能引用 转自&#xff1a;http://c.biancheng.net/ C中的左值和右值 右值引用可以从字面意思上理解&#xff0c;指的是以引用传递&#xff08;而非值传递&#xff09;的方式使用 C 右值。关于 C 引用&#xff0c;已经在《C引用…

C++11 std::function, std::bind, std::ref, std::cref

C11 std::function, std::bind, std::ref, std::cref 转自&#xff1a;http://www.jellythink.com/ std::function 看看这段代码 先来看看下面这两行代码&#xff1a; std::function<void(EventKeyboard::KeyCode, Event*)> onKeyPressed; std::function<void(Ev…

Java安全(一) : java类 | 反射

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 1.java基础 Java平台共分为三个主要版本Java SE&#xff08;Java Platform, Standard Edition&#xff0c;Java平台标准版&#xff09;、Java EE&#xff0…

LeetCode-287 寻找重复数 二分法

LeetCode-287 寻找重复数 二分法 287. 寻找重复数 给定一个包含 n 1 个整数的数组 nums &#xff0c;其数字都在 1 到 n 之间&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 &#xff0c;找出 这个重复的数 。…