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 字符串的输入
同样有 cin
和 scanf
两种方法
方法一:
int main() {const int N = 100;char s[N];scanf("%s", s);
}
方法二:
int main() {string s;cin >> s;cout << s << endl;
}
字符串的输入有几点需要注意:
- C/C++ 中读入的字符串时包含结束符
\0
的,我们需要的字符数组的长度要比真正的字符数加一; cin
和scanf
两种读入方式都会忽略行首和行位的空格。
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码
- 可以根据 ASCII 码的区间来判断某个字符是数字还是大小写字母等(比如通过与
'a'
、'z'
等 ASCII 码值的大小关系)。 - 根据数字字符的 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数组
- char[] 在C/C++中均可用,string仅在C++中可用,且需要
#include <string>
,一般称 char[] 为 C 风格的字符串,称 string 为 C++ 风格的字符串 - string 通常用 cin 读入,char[] 通常用 scanf 读入。scanf 不可以用来读入 string
- char[] 构造 string:
string str(s);
- string 转换为 char[]:
s = str.c_str();
- 一般直接 cin 读取 string 会很慢,可以读到 char[] 中,再构造为 string
printf/scanf 与 cout/cin
在读取数据量巨大(经验值为大于1e5个正数以上)时,cin 会很慢,这是因为 cin/cout 需要与 scanf/printf 同步。
解决方法:
改用 scanf/printf
关闭同步,改善效率(有的编译器可行,有的无效)
cin.tie(0); cout.tie(0); ios::sync_with_stdio(0);
cout << endl;
除了换行之外,还会清空缓存区,而清空缓存区这件事情会耗时很久,因此为了提高速度,一般直接:cout << "\n";
,会快很多
保留小数位数
- 如保留 3 位小数:
printf("%.4f\n", a);
, 此种方法会自动的四舍五入。 - 一位小数四舍五入成整数:
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
C++ ACM模式输入输出相关推荐
- ACM模式输入输出攻略 | C++篇
文章目录 ACM模式输入输出攻略 | C++篇 1.核心代码模式与ACM模式 2.C++常用的输入输出方法 2.1 输入 (1)cin (2)getline() (3)getchar() 2.2 输出 ...
- JS输入输出(ACM模式
JS输入输出(ACM模式 1. 输入 1.1 一行输入一个int数字 1.2 一行为一个一维数组 ① 输入为`1 2 3`的形式 ② 输入为`123`的形式 2. 输出(数组输出为输入类似的形式) 2 ...
- python3 ACM模式的输入输出例子教学
Python的输入是字符串,所以要自己转类型 strip去掉左右两端的空白符,返回str slipt把字符串按空白符拆开,返回[str] map把list里面的值映射到指定类型,返回[type] EO ...
- [JS]在ACM模式下获取输入
输入输出处理 核心代码模式处理 不需要处理任何输入输出,直接返回值即可. ACM 模式 你的代码需要处理输入输出,请使用如下样例代码读取输入和打印输出: while (line = readline( ...
- 使用Javascript在Leetcode中的ACM模式下无法获取输入数据的问题
今天做了一道字节的题目,是字节自己出的新题,没有任何题解,且只能使用 ACM 模式,代码编辑区一片空白.然而当我想获取自定义的输入数据时,却获取不到.本人前端一枚,平时做题都是使用 JS 写算法,所以 ...
- 面试 | Java 算法的 ACM 模式
Java 算法的 ACM 模式 前言 1. 数字处理 1.1 多组空格分隔的两个正整数 1.2 第一行组数接空格分隔的两个正整数 1.3 空格分隔的两个正整数为0 0 结束 1.4 每行第一个为个数后 ...
- ACM模式各种输入整理(C++)
1.前言 本文整理ACM模式的各种输入形式. 2. ACM模式的输入种类 2.1 整形数组输入 2.1.1 在终端的一行中输入固定数目的整型数字,并存到数组中,中间以空格分隔 示例: 3 1 2 3 ...
- Java ACM模式
Java ACM模式 文章目录 Java ACM模式 1:java.util.* 2:其他 1:java.util.* Scanner reader = new Scanner(System.in); ...
- ACM的输入输出总结
关于ACM的输入输出(一) 一般来说ACM的现场赛会规定输入输出 或者是文件输入标准输出 也可能是文件输入文件输出 如果没有规定的话那么一般就是标准的输入输出了 那说一下输入输出的重定向 一般用下面两 ...
最新文章
- AI可以在游戏里称霸,但是解决现实问题太难了
- apache禁止访问html,apache 限制目录访问
- 人脸识别有哪些利与弊
- [PAT乙级]1022 D进制的A+B
- IME输入法编程心得
- 从 HTML 提取文本的 7 个工具
- 飘云阁15周年逆向破解教程
- Android ndk开发入门集锦一
- pyinstaller 出现Cannot find existing PyQt5 plugin directories
- 看看别人家的神仙公司
- 抖音云控系统多少钱一套?
- 企业级网络性能优化 课内8 vlanif2in1
- 【Java】 实现一个简单文件浏览器(1)
- 【NDN IoT】Caching in Named Data Networking for the Wireless Internet of Things
- automotive 安卓开发_谷歌首次提及「Android Automotive」,是安卓车机系统亮相前奏?...
- java正则表达式 以开头结尾_正则匹配 符合以什么开头以什么结尾的
- 最新进展:钉钉被小学生逼疯,拍片在线求饶哈哈哈哈
- 刚子扯谈:广告向东 客户向西
- MIR4 预制凭证修改及过账,尾差调整
- 微信营销解密:移动互联网时代的营销革命
热门文章
- Springboot2.x +JPA 集成 Apache ShardingSphere 读写分离
- ftp 553 Could not create file
- Linux zookeeper下载、单点部署
- 在下拉菜单中,传递的value参数为 id时,如何拿到其 label值?
- JavaScript-jQuery选择器
- tcp分包传图片 如何还原_技术控丨超详细解析TCP重传机制
- jq之$(“ul li:first-child“)
- 软件数控编程_这么多CNC数控编程软件, 你觉得哪个好?
- linux如何运行verilog,linux系统下ncverilog的详细命令linux系统下ncverilog的详细命令.doc...
- php怎么把日期加时间,将小时分钟添加到日期时间 - php