【教程】ACM 模式输入输出 C++

目录

  • 输入输出
    • 输入单个数字 or 字符
    • 输入单行数列
    • 输入单行字符串
    • 输入多行符号列,已知行数和列数
  • 字符串处理
    • 删除字符串中的某个字符 / 子串
      • find()
      • erase()
    • 输入字符串并分割到 vector\<string> 中
      • getline()
      • stringstream
      • 示例
  • 快速排序
  • 其他

输入输出

输入单个数字 or 字符

  1. 描述:输入单个数字或字符
  2. 输入示例
5
2
a
b
int n, m;
char x, y;
cin >> n;
cin >> m;
cin >> x;
cin >> y;// 验证输出
cout << n << ' ' << m << ' ' << x << ' ' << y << endl; // 5 2 a b

输入单行数列

  1. 描述:单行数列,且不清楚数列个数空格或逗号分割
  2. 输入示例 1:5 4 3 2 1 10
  3. 输入示例 2:5,4,3,2,1,10
void SingleLineOfNum() {vector<int> nums;int temp;while (cin >> temp) {nums.push_back(temp);if (cin.get() == '\n') break; // 对逗号的读取发生在这里,读取后就丢弃了}// 验证输出for (auto n : nums) {cout << n << " "; // 均输入 5 4 3 2 1 10}
}

【注】cin 默认丢弃空格,tab 这些分隔符

输入单行字符串

  1. 描述:单行字符串,且不清楚数列个数空格或逗号分割
  2. 额外头文件
    1. <string>:string
    2. <sstream>:stringstream,原理请见下方字符串章节
  3. 输入示例 1:zhang lili mengmeng
  4. 输入示例 2:zhang,lili,mengmeng
void SingleLineOfString() {string str;string temp;vector<string> res;getline(cin, str);stringstream ss(str);// while (getline(ss, temp, ' ')) { // 针对空格分隔符while (getline(ss, temp, ',')) {    // 针对逗号分隔符res.push_back(temp);}// 验证输出for (auto r : res) {cout << r << " "; // 均输出 zhang lili mengmeng}
}

输入多行符号列,已知行数和列数

  1. 描述:程序先输入 mn 表示 m 行数列,每行 n 个数字,字符,字符串。接着程序输入具体的内容
// 输入示例 1,数字 + 空格分割
3 3     // 第一个 3 表示一共三行数列,第二个 3 表示每行数列有 3 哥元素
1 2 3
4 5 6
7 8 9// 输入示例 2,字符 + 逗号分割
3 3
zhang,lili,mengmeng
wang,guo,qiqi
xu,coco,siri
void MultipleRowAndCol() {int row, col;// 先输入行和列的数量cin >> row;cin >> col;vector<vector<int>> res(row, vector<int>(col, 0)); // 初始化一个二维的 vectorfor (int i = 0; i < row; ++i) {for (int j = 0; j < col; ++j) {cin >> res[i][j];}}// 验证输出// 1 2 3// 4 5 6// 7 8 9for (int i = 0; i < row; ++i) {for (int j = 0; j < col; ++j) {cout << res[i][j] << " ";}cout << endl;}
}
  1. 描述:另一种情况是,数列通过逗号分隔,而非上述的空格分割。思路也很简单,我们把逗号也视为数列的一部分,但是在输入时,不将逗号输入进 vector

字符串处理

删除字符串中的某个字符 / 子串

find()

函数原型:针对 string 类型时

size_t find (const string& str, size_t pos = 0) const noexcept;

描述:该函数可以返回要查找的标志符的下标(下标从 0)开始

erase()

函数原型:按删除长度 len 作为参数的函数原型

string& erase (size_t pos = 0, size_t len = npos);

描述:删除字符串指定位置字符以及之后 len 个字符

#include <iostream>
using namespace std;int main()
{string s = "I am a programmer.";int pos = s.find(".");cout << pos << endl; // 17s.erase(pos, 1);cout << s << endl;   // I am a programmerreturn 0;
} 

输入字符串并分割到 vector<string> 中

getline()

函数原型:

(1) istream& getline (istream&  is, string& str, char delim);
(2) istream& getline (istream&  is, string& str);

描述:该函数主要的作用是从输入流中提取字符然后将其存入字符串 string 中。

在下方的代码中,有两处使用到该方法。

第一处,我们用 getline 来从输入流中读取字符并存入字符串中,即 getline(cin, str);

第二处,我们利用 getline 来分割字符串,它的参数如下

  1. istream& is:在本例中我们用 stringstream 来对最开始的 string 进行类型转换
  2. string& str:它是每一次分割的子串缓冲区,在本例中用 temp 来表示
  3. char delim:分隔符

stringstream

描述:stringstream 是输入输出的字符串流对象,将字符串转换为字符串流,我们可以利用字符串流提供的多种功能操作字符串

示例

#include <iostream>
#include <sstream>
#include <string>
#include <vector>using namespace std;int main()
{string str;// 1. 输入字符串getline(cin, str);vector<string> res;// 2. 将字符串转换为字符串流stringstream input(str);string temp;				// 子串缓冲区// 3. 设置分隔符const char delim = ' ';// 4. 分割字符串流,每个分割出来的子串放入 vector 中while (getline(input, temp, delim)) {res.push_back(temp);}// 【可选】5. 将 vector 中的子串重新拼接成完整字符串string out;for (int i = 0; i < res.size(); ++i) {out += res[i];if (i != res.size() - 1) out += " ";}cout << out << endl;return 0;
}

快速排序

  1. 描述:利用已有的 sort 函数,可以实现对容器中数列的快速排序,针对一些排序并非题目考察主要内容时,非常方便
  2. 额外头文件
    1. <vector>:vector
    2. <algorithm>:sort
void ACMSort() {vector<int> arr = { 23, 21, 55, 100, 1, 3,45,78 };// sort(arr.begin(), arr.end()); // 默认从小到大sort(arr.begin(), arr.end(), greater<int>()); // greater 使得其可以从大到小排列// 验证结果for (auto a : arr) {cout << a << " ";}
}

其他

  1. 常见的整型最值
    INT_MAX(9,223,372,036,854,775,807,64 位下)
    INT_MIN(–9,223,372,036,854,775,808,64 位下)

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

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

相关文章

渗透实例------2个星期艰难的渗透纪实

2个星期艰难的渗透纪实 kyo327 入侵原因,需删一帖子,目标用www.111.com代替,前期通过初期的网站文件暴力猜解,扫描到robots.txt这个文件,有以下目录。如图1: 图1 再通过对这些文件的访问,从3gadm.php文件的标题栏得到该网站采用的是diy-page8.3的cms,自然可以先用搜索…

导购APP、淘客查券机器人与淘客系统:全面对比与选择

导购APP、淘客机器人与淘客系统&#xff1a;全面对比与选择 在互联网购物的时代&#xff0c;导购APP、淘客机器人和微赚淘客系统成为了消费者们的三大重要工具。它们各具优势&#xff0c;但也存在一些问题。本文将为您详细对比这三种工具&#xff0c;帮助您在购物时做出最合适…

Android JNI 异常定位(2)—— addr2line

Android native报错有时候只有一句 signal 11 (SIGSEGV)&#xff0c;这种情况仅通过log是很难定位到问题的。不过Android 在/data/tombstones目录保存了错误的堆栈信息&#xff0c;为定位bug提供了路径。不过一般这里的log都无法像java一样直接定位的出错的行数。如下图&#x…

2023做车载测试真的可以远离内耗!转行车载月入20K!

2023年&#xff0c;车载测试正处于一个发展阶段&#xff0c;随着新能源汽车的蓬勃发展&#xff0c;电气化、智能化逐渐成为发展趋势。在汽车开发过程中&#xff0c;测试是非常重要的一个环节。现在软件越来越多地被应用到汽车上&#xff0c;对软件测试的需求也越来越多、越来越…

Linux上使用ldapsearch命令通过AD GC查询指定用户

一&#xff0c;前言 需要你对Microsoft AD ,AD GC有一定的了解&#xff0c;并且AD要启用了GC。特别是要弄懂&#xff0c;林和域的关系,你才能明白GC在他俩之间的关系。 GC中文名&#xff1a;全局编录 会将你林下所有域的所有对象存储在一个目录里面&#xff0c;但是并没有存储…

数据库数据恢复—MongoDB数据库文件拷贝出现错误的数据恢复案例

MongoDB数据库数据恢复环境&#xff1a; 一台Windows Server操作系统的虚拟机&#xff0c;虚拟机上部署有MongoDB数据库。 MongoDB数据库故障&检测&#xff1a; 在未关闭MongoDB服务的情况下&#xff0c;工作人员将MongoDB数据库文件拷贝到其他分区&#xff0c;然后将原数…

力扣:175. 组合两个表(Python3)

题目&#xff1a; 表: Person ---------------------- | 列名 | 类型 | ---------------------- | PersonId | int | | FirstName | varchar | | LastName | varchar | ---------------------- personId 是该表的主键&#xff08;具有唯一值的列&#…

js进阶笔记之原型,原型链

目录 1、原型对象 constructor 属性 对象原型 2、原型链 3、instanceof 4、原型继承 1、原型对象 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候再一个一个的依次调用就可以了。 面向对象是把事务分解成为…

音频采集的相关基础知识

本文引注: https://zhuanlan.zhihu.com/p/652629744 1.麦克风的种类 (1)模拟麦克风 ECM麦克风&#xff1a;驻极体电容麦克风(ECM)&#xff0c;典型的汽车ECM麦克风是一种将ECM单元与小型放大器电路整合在单个外壳中的装置。放大器提供一个模拟信号&#xff0c;其电压电平允许…

软件工程理论与实践 (吕云翔) 第十一章: 软件编程课后习题及其答案解析

第十一章&#xff1a; 软件编程 1.判断题 &#xff08;1&#xff09;C语言是一种纯面向对象语言。&#xff08;&#xff09; &#xff08;2&#xff09;进行程序设计语言的选择时&#xff0c;首先考虑的是应用领域。&#xff08;√&#xff09; &#xff08;3&#xff09;良…

JavaScript 如何拷贝对像(Object)或者数组(Array)

目录 JavaScript数据拷贝类型 浅拷贝 深拷贝 举例&#xff1a; 浅拷贝 数组 对象 深拷贝 lodash cloneDeep使用示例 自定义深拷贝方法示例 JSON.parse() 和 JSON.stringify()使用示例 JavaScript数据拷贝类型 浅拷贝 数组可以使用Array.prototype.slice()方法 …

JS实现数字千分位分割(手写纯享版)

简介 在前端开发中&#xff0c;我们经常需要对数字进行格式化&#xff0c;其中一种常见的需求就是将数字表示为千分位格式&#xff0c;以提高可读性。本文将介绍如何使用 JavaScript 实现一个简单而有效的千分位格式化函数。 千分位格式化的需求 千分位格式化是一种将数字中…

python实现鼠标实时坐标监测

python实现鼠标实时坐标监测 一、说明 使用了以下技术和库&#xff1a; tkinter&#xff1a;用于创建GUI界面。pyperclip&#xff1a;用于复制文本到剪贴板。pynput.mouse&#xff1a;用于监听鼠标事件&#xff0c;包括移动和点击。threading&#xff1a;用于创建多线程&…

PWM实验

PWM相关概念 PWM:脉冲宽度调制定时器 脉冲&#xff1a;方波信号&#xff0c;高低电平变化产生方波 周期&#xff1a;高低电平变化所需要时间 频率&#xff1a;1s钟可以产生方波个数 占空比&#xff1a;在一个方波内&#xff0c;高电平占用的百分比 宽度调制&#xff1a;占…

AI:86-基于深度学习的街景图像地理位置识别

🚀 本文选自专栏:人工智能领域200例教程专栏 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的代码,详细讲解供大家学习,希望可以帮到大家。欢迎订阅支持,正在不断更新中,…

Leetcode:622. 设计循环队列 题解【具详细】

目录 一、题目&#xff1a; 二、思路详解&#xff1a; 1.循环队列的存储定义 2.循环队列的创建 3.循环队列的判空与判断情况 (1) 循环队列的判空: (2) 循环队列的判满 4.循环队列元素的插入 5.循环队列元素的删除 6.获取队头元素 7.获取队尾元素 8.循环队列释放 三…

打不开clickonce问题解决过程

1.用户电脑user文件夹下有xx和xx.1两个账户,原先安装在xx账户下,后修了电脑原数据保留在xx.1,新创建XX,之后clickonce就打不开了表现为没有反应,,删除注册表和appdata都只能正常安装,但是不能打开,没有任何报错,发现在我的电脑下打开有这样的提示,,在用户电脑上没有 尝试通过修…

大家为什么开始配置长效IP代理?长效IP代理有什么优势?

随着网络技术的发展&#xff0c;越来越多的人开始关注网络安全和隐私保护。其中&#xff0c;长效IP代理作为一种安全、高效的解决方案&#xff0c;受到了越来越多人的关注。本文将探讨大家为什么开始配置长效IP代理&#xff0c;以及长效IP代理的优势。 一、长效IP代理的优势1.保…

目前市面上进销存软件有哪些?那个牌子靠谱?

目前市面上进销存软件有哪些&#xff1f;哪个牌子靠谱&#xff1f; 说起进销存软件&#xff0c;如果你是没用过&#xff0c;正在寻找一款合适的&#xff0c;你是不是遇到了以下问题&#xff1a; 公司多部门协作还在用Excel&#xff0c;没有信息化支撑&#xff1f;跨部门存在信…

C语言——深入理解指针——函数指针

一、函数指针变量 1.1 函数指针变量的创建 什么是函数指针变量呢&#xff1f; 函数指针变量应该是用来存放函数地址的&#xff0c;未来通过地址能够调⽤函数的。 那么函数是否有地址呢&#xff1f; 我们做个测试&#xff1a; #include <stdio.h> void test() {print…