C++常用的输入输出方法(ACM模式)

本文介绍了C++中常用的输入输出函数如cin、getline()和getchar(),并提供了算法案例,包括一维和二维数组的输入,以及如何处理以非空格隔开的元素。此外,还详细讲解了链表的定义、反转链表的实现和打印链表的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

C++中的输入输出函数有很多,我们本章只针对大部分算法题的输入输出。


一、输入输出方法

1、cin

cinC++中, 标准的输入流对象
注意: cin以空格、tab、换行符作为分隔符

#include <iostream>
using namespace std;

int main() {
   
    int num;
    cin >> num;
    cout << num << endl;
    return 0;
}

在这里插入图片描述

2、getline()

cin在读取字符串间有空格的时候会被打断,这时候就需要getline()函数
注意: getline()遇到换行符结束

#include <iostream>
#include "string"
using namespace std;

int main() {
   
    string str;
    getline(cin, str);
    cout << str << endl;
    return 0;
}

在这里插入图片描述

3、getchar()

从缓存区中读出一个字符

#include <iostream>
using namespace std;

int main() {
   
    char ch;
    ch = getchar();
    cout << ch << endl;
    return 0;
}

在这里插入图片描述

二、算法案例

1、一维数组

1.1 输入固定长度

首先输入待输入元素个数,然后输入元素(以空格隔开)
注意这里的元素也可以是其他数据类型,比如字符串abc,只需要修改vector为对应的数据类型

#include <iostream>
#include <vector>

using namespace std;

int main() {
   
    int n;
    cin >> n;
    vector<int> vec(n);
    for (int i = 
### 实现高效的Java ACM竞赛输入输出方法 对于ACM编程竞赛中的高效输入输出,在Java中使用`Scanner`虽然方便但是速度较慢[^1]。为了提高效率,可以采用`BufferedReader`配合`StringTokenizer`的方式读取数据并解析字符串。 下面是一个简单的例子来展示如何利用这些类快速处理大量数值: ```java import java.io.*; import java.util.*; public class FastIO { static class Reader { final private int BUFFER_SIZE = 1 << 16; private DataInputStream din; private byte[] buffer; private int bufferPointer, bytesRead; public Reader() { din = new DataInputStream(System.in); buffer = new byte[BUFFER_SIZE]; bufferPointer = bytesRead = 0; } public Reader(String file_name) throws IOException { din = new DataInputStream(new FileInputStream(file_name)); buffer = new byte[BUFFER_SIZE]; bufferPointer = bytesRead = 0; } public String readLine() throws IOException { byte[] buf = new byte[65535]; // line length int cnt = 0, c; while ((c = read()) != -1) { if (c == '\n') break; buf[cnt++] = (byte) c; } return new String(buf, 0, cnt); } public int nextInt() throws IOException { int ret = 0; byte c = read(); while (c <= ' ') c = read(); boolean neg = (c == '-'); if (neg) c = read(); do { ret = ret * 10 + c - '0'; } while ((c = read()) >= '0' && c <= '9'); if (neg) return -ret; return ret; } private void fillBuffer() throws IOException { bytesRead = din.read(buffer, bufferPointer = 0, BUFFER_SIZE); if (bytesRead == -1) buffer[0] = -1; } private byte read() throws IOException { if (bufferPointer == bytesRead) fillBuffer(); return buffer[bufferPointer++]; } public void close() throws IOException { if (din == null) return; din.close(); } } public static void main(String[] args) throws Exception { Reader sc = new System.in instanceof InputStream ? new Reader() : new Reader("input.txt"); PrintWriter pw = new PrintWriter(System.out); int n = sc.nextInt(); // 假设要读入整数N long sum = 0; for(int i=0;i<n;++i){ sum += sc.nextInt(); } pw.println(sum); // 输出求和的结果 pw.flush(); pw.close(); sc.close(); } } ``` 此代码片段展示了自定义的`Reader`类用于加速输入操作,并通过`PrintWriter`实现了更快捷的输出功能。这种方法能够显著减少I/O瓶颈带来的性能损失,使得程序运行更加迅速[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值