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

CSDN 2024-10-07 08:05:00 阅读 66

文章目录

前言一、输入输出方法1、cin2、getline()3、getchar()

二、算法案例1、一维数组1.1 输入固定长度1.2长度不固定

2、固定二维数组3、以非空格隔开的元素输入3、常见数据结构定义以及输入输出3.1 链表

前言

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


一、输入输出方法

1、cin

<code>cin是C++中, 标准的输入流对象

注意: cin以空格、tab、换行符作为分隔符

#include <iostream>

using namespace std;

int main() { -- -->

int num;

cin >> num;

cout << num << endl;

return 0;

}

在这里插入图片描述

2、getline()

<code>cin在读取字符串间有空格的时候会被打断,这时候就需要getline()函数

注意: getline()遇到换行符结束

#include <iostream>

#include "string"

using namespace std;

int main() { -- -->

string str;

getline(cin, str);

cout << str << endl;

return 0;

}

在这里插入图片描述

3、getchar()

从缓存区中读出一个字符

<code>#include <iostream>

using namespace std;

int main() { -- -->

char ch;

ch = getchar();

cout << ch << endl;

return 0;

}

在这里插入图片描述

二、算法案例

1、一维数组

1.1 输入固定长度

首先输入<code>待输入元素个数,然后输入元素(以空格隔开)

注意这里的元素也可以是其他数据类型,比如字符串abc,只需要修改vector为对应的数据类型

#include <iostream>

#include <vector>

using namespace std;

int main() { -- -->

int n;

cin >> n;

vector<int> vec(n);

for (int i = 0; i < n; i++) {

cin >> vec[i];

}

for (int i = 0; i < vec.size(); i++) {

cout << vec[i] << ' ';

}

return 0;

}

在这里插入图片描述

1.2长度不固定

注意这里的元素也可以是其他数据类型,比如字符串<code>abc,只需要修改vector为对应的数据类型

#include <iostream>

#include <vector>

using namespace std;

int main() { -- -->

int num;

vector<int> vec;

while (cin >> num) {

vec.push_back(num);

if (getchar() == '\n') break;

}

for (int i = 0; i < vec.size(); i++) {

cout << vec[i] << ' ';

}

return 0;

}

在这里插入图片描述

2、固定二维数组

第一次输入

第二次按照空格和换行符输入元素

<code>#include <iostream>

#include <vector>

using namespace std;

int main() { -- -->

int m;

int n;

cin >> m >> n;

vector<vector<int>> vec(m, vector<int>(n));

for (int i = 0; i < m; i++) {

for (int j = 0; j < n; j++) {

cin >> vec[i][j];

}

}

for (int i = 0; i < m; i++) {

for (int j = 0; j < n; j++) {

cout << vec[i][j] << ' ';

}

}

return 0;

}

在这里插入图片描述

3、以非空格隔开的元素输入

如果输入的是<code>a,b,c这种以非空格或者换行符隔开的,直接以字符串读入,然后分割

#include <iostream>

#include <vector>

using namespace std;

int main() { -- -->

string str;

getline(cin, str);

vector<int> vec;

int fast = 0;

for (int slow = 0; slow < str.size(); slow++) {

fast = slow;

while (str[fast] != ',' && fast < str.size()) {

fast++;

}

string tmp = str.substr(slow, fast - slow);

vec.push_back(stoi(tmp));

slow = fast;

}

for (int i = 0; i < vec.size(); i++) {

cout << vec[i] << ' ';

}

return 0;

}

在这里插入图片描述

3、常见数据结构定义以及输入输出

3.1 链表

这里我们以206. 反转链表为例,题目如下:

给你单链表的头节点 <code>head,请你反转链表,并返回反转后的链表。

示例

示例 1:

输入:

<code>5

1 2 3 4 5

输出:

5 4 3 2 1

示例 2:

输入:

<code>2

1 2

输出:

2 1

示例 3:

输入:

0

输出:

提示

链表中节点的数目范围是 [0, 5000]-5000 <= Node.val <= 5000


代码如下

#include <iostream>

using namespace std;

struct ListNode { -- -->//链表定义

int val;

ListNode *next;

ListNode(int x) : val(x), next(nullptr) { }

};

ListNode* reverse(ListNode* head) { //翻转链表

ListNode* pre = nullptr;

ListNode* cur = head;

while (cur != nullptr) {

ListNode* tmp = cur->next;

cur->next = pre;

pre = cur;

cur = tmp;

}

return pre;

}

void printLinkedList(ListNode* head) { //打印链表

ListNode* cur = head;

while (cur != nullptr) {

cout << cur->val << " ";

cur = cur->next;

}

cout << endl;

}

int main() {

int m, n;

ListNode* dummyHead = new ListNode(0);

while (cin >> n) { //链表输入

ListNode* cur = dummyHead;

if (n == 0) {

continue;

}

while (n--) {

cin >> m;

ListNode* newNode = new ListNode(m);

cur->next = newNode;

cur = cur->next;

}

// printLinkedList(dummyHead->next);

reverse(dummyHead->next);

printLinkedList(cur);

}

return 0;

}

// 64 位输出请用 printf("%lld")

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。