文章目录
- 前言
- 一、输入输出方法
- 1、cin
- 2、getline()
- 3、getchar()
- 二、算法案例
- 1、一维数组
- 1.1 输入固定长度
- 1.2长度不固定
- 2、固定二维数组
- 3、以非空格隔开的元素输入
- 3、常见数据结构定义以及输入
- 3.1 链表
前言
C++中的输入输出函数有很多,我们本章只针对大部分算法题的输入输出。
一、输入输出方法
1、cin
cin
是C++
中, 标准的输入流对象
注意: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 = 0; i < n; i++) {
cin >> vec[i];
}
for (int i = 0; i < vec.size(); i++) {
cout << vec[i] << ' ';
}
return 0;
}
1.2长度不固定
注意这里的元素也可以是其他数据类型,比如字符串
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、固定二维数组
第一次输入行和列
第二次按照空格和换行符输入元素
#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、以非空格隔开的元素输入
如果输入的是
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 链表
#include <iostream>
using namespace std;
// 链表定义
struct ListNode {
int val;
ListNode *next;
ListNode() : val(0), next(nullptr) {}
ListNode(int x) : val(x), next(nullptr) {}
ListNode(int x, ListNode *next) : val(x), next(next) {}
};
int main()
{
ListNode* dummyHead = new ListNode(0);//虚拟头节点
ListNode* pre = dummyHead;
ListNode* cur = nullptr;
int num;
while(cin >> num)
{
//设置为-1退出
if(num == -1) break;
cur = new ListNode(num);
pre->next = cur;
pre = cur;
}
cur = dummyHead->next;
// 输出单链表的value
while(cur)
{
cout << cur->val << ' ';
cur = cur->next;
}
return 0;
}