当前位置: 首页 > news >正文

C++算法题中的输入输出形式(I/O)

本文主要帮助刷leetcode题型快速适应完整带输入输出的题(机试、考试、比赛等)

一、单组输入(仅一组数据)

1. 单个整数 / 浮点数
// 输入:5
int a;
cin >> a;// 输入:3.14
double b;
cin >> b;

2. 多个整数 / 浮点数(空格分隔)
// 输入:1 2 3 4
int a, b, c, d;
cin >> a >> b >> c >> d;// 输入:1.5 2.0 3.7
double x, y, z;
cin >> x >> y >> z;
3. 单个字符串(无空格)
// 输入:hello
string s;
cin >> s;  // cin遇空格/换行终止,适合无空格字符串
4. 一行带空格的字符串
// 输入:hello world
string s;
getline(cin, s);  // 读取整行(包括空格),需注意前面是否有残留换行符

二、多组输入(已知行数)

1. 先输入行数 n,再输入 n 组数据
// 输入:
// 3
// 1 2
// 3 4
// 5 6
int n;
cin >> n;
while (n--) {int a, b;cin >> a >> b;// 处理每组a,b
}
2. 已知矩阵行列数(如 n 行 m 列)
// 输入:
// 2 3
// 1 2 3
// 4 5 6
int n, m;
cin >> n >> m;
vector<vector<int>> mat(n, vector<int>(m));
for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {cin >> mat[i][j];}
}

三、多组输入(未知行数,以 EOF 结束)

1. 持续读取直到输入结束(控制台按Ctrl+Z终止)
// 输入:
// 1 2
// 3 4
// 5 6
// (Ctrl+Z+回车结束)
int a, b;
while (cin >> a >> b) {  // cin读取失败时返回false// 处理每组a,b
}
2. 读取未知行数的字符串(每行一个)
// 输入:
// first line
// second line
// third line
// (Ctrl+Z+回车结束)
string s;
while (getline(cin, s)) {  // getline读取失败时返回false// 处理每行s
}

四、多组输入(以特定值终止)

1. 以 0 0 或 - 1 -1 等特殊值结束
// 输入:
// 1 2
// 3 4
// 0 0  (终止标志)
int a, b;
while (cin >> a >> b) {if (a == 0 && b == 0) break;  // 遇到终止标志退出// 处理每组a,b
}
2. 以空行终止(字符串输入)
// 输入:
// hello
// world
// (空行)
string s;
while (getline(cin, s)) {if (s.empty()) break;  // 空行终止// 处理每行s
}

五、字符串与数值混合输入

1. 一行中包含字符串和整数
// 输入:abc 123 def 456
string s1, s2;
int a, b;
cin >> s1 >> a >> s2 >> b;
2. 先读整数,再读带空格的字符串(需处理残留换行符)
// 输入:
// 2
// hello world
// test case
int n;
cin >> n;
cin.ignore();  // 忽略n后的换行符,否则getline会读空行
while (n--) {string s;getline(cin, s);// 处理s
}

六、特殊分隔符输入(非空格 / 换行)

1. 逗号分隔的整数
// 输入:1,2,3,4,5
string s;
getline(cin, s);
replace(s.begin(), s.end(), ',', ' ');  // 逗号替换为空格
stringstream ss(s);  // 用stringstream解析
int x;
while (ss >> x) {// 依次读取1,2,3,4,5
}
2. 冒号分隔的键值对
// 输入:a:1 b:2 c:3
string s;
while (cin >> s) {size_t colon = s.find(':');string key = s.substr(0, colon);int val = stoi(s.substr(colon + 1));// 处理key和val
}

七、大数据量输入(优化速度)

当输入数据量极大(如 1e5+)时,用cin可能超时,需优化:

// 方法1:关闭cin同步(与stdio兼容)
ios::sync_with_stdio(false);
cin.tie(0);
// 之后正常用cin >> ...// 方法2:用scanf(速度更快)
int a, b;
while (scanf("%d %d", &a, &b) != EOF) {// 处理a,b
}

八、输出常见形式

1. 单个 / 多个值(空格分隔,换行结尾)
int a = 1, b = 2;
cout << a << " " << b << endl;  // 输出:1 2
2. 数组 / 矩阵输出
vector<int> arr = {1,2,3,4};
for (int x : arr) {cout << x << " ";  // 输出:1 2 3 4 (末尾多一个空格,机试通常不报错)
}
cout << endl;// 矩阵(每行换行)
vector<vector<int>> mat = {{1,2},{3,4}};
for (auto& row : mat) {for (int x : row) {cout << x << " ";}cout << endl;
}
3. 字符串输出(保留空格)
string s = "hello world";
cout << s << endl;  // 输出:hello world
4. 无换行连续输出
// 输出:1234(无空格无换行)
cout << 1 << 2 << 3 << 4;

以上涵盖了算法题中 95% 以上的输入输出场景,核心是根据输入格式选择cin/scanf(数值 / 无空格字符串)或getline(带空格字符串 / 整行),并注意处理多组输入的终止条件。


文章转载自:

http://MHw4QrGt.qnbck.cn
http://nLzlohok.qnbck.cn
http://851UmgNP.qnbck.cn
http://cVOfmACp.qnbck.cn
http://QytiMqbG.qnbck.cn
http://cd64JMO7.qnbck.cn
http://hsDlWniw.qnbck.cn
http://BfI9ujcD.qnbck.cn
http://ywGeRiSy.qnbck.cn
http://ttY1dwy7.qnbck.cn
http://XKN2S8zd.qnbck.cn
http://cKQEm23C.qnbck.cn
http://MHne8ZMu.qnbck.cn
http://mmIxR3Qf.qnbck.cn
http://eqWbw3ZC.qnbck.cn
http://uXp4jCGT.qnbck.cn
http://9IoB27Ds.qnbck.cn
http://1MZX2B6b.qnbck.cn
http://gyrEFSzw.qnbck.cn
http://0q6Snmd8.qnbck.cn
http://h3O32Nbj.qnbck.cn
http://bSyApPR3.qnbck.cn
http://4F6TGrZn.qnbck.cn
http://8MYEkC6S.qnbck.cn
http://LGAOf4Iu.qnbck.cn
http://EH4plVV2.qnbck.cn
http://phzdiZOD.qnbck.cn
http://CxEMoCw0.qnbck.cn
http://2FnwazNo.qnbck.cn
http://qWtULFBm.qnbck.cn
http://www.dtcms.com/a/382981.html

相关文章:

  • 【算法详解】:编程中的“无限”可能,驾驭超大数的艺术—高精度算法
  • Linux基础开发工具(gcc/g++,yum,vim,make/makefile)
  • NLP:Transformer之多头注意力(特别分享4)
  • arm芯片的功能优化方案
  • 【C++】动态数组vector的使用
  • 软件工程实践三:RESTful API 设计原则
  • [硬件电路-221]:PN结的电阻率是变化的,由无穷大到极小,随着控制电压的变化而变化,不同的电场方向,电阻率的特征也不一样,这正是PN的最有价值的地方。
  • 用户争夺与智能管理:定制开发开源AI智能名片S2B2C商城小程序的战略价值与实践路径
  • 5 遥感与机器学习第三方库安装
  • 告别双系统——WSL2+UBUNTU在WIN上畅游LINUX
  • 【开题答辩全过程】以 SpringBoot的淘宝购物优惠系统的设计与实现为例,包含答辩的问题和答案
  • SpringMVC @RequestMapping的使用演示和细节 详解
  • 后端json数据反序列化枚举类型不匹配的错误
  • 【贪心算法】day10
  • vue动画内置组件
  • 构建完整的RAG生态系统并优化每个组件
  • 20250914-03: Langchain概念:提示模板+少样本提示
  • Java 字符编码问题,怎么优雅地解决?
  • CopyOnWrite
  • 【Ambari监控】监控数据接口查询方法
  • shell 脚本:正则表达式
  • 可调精密稳压器的原理
  • Altium Designer(AD)PCB打孔
  • React 状态管理
  • [Spring Cloud][5] 注册中心详解,CAP 理论,什么是 Eureka
  • 返利app的跨域问题解决方案:CORS与反向代理在前后端分离架构中的应用
  • C++算法题—图的邻接矩阵输入形式(I\O)
  • 主动性算法-如何让机器拥有嗅觉?
  • Knockout.js Google Closure Compiler 工具模块详解
  • 从关键词匹配到语义理解:6大Embedding技术如何重塑企业搜索