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