文章目录
- 前言
 - 一、输入输出方法
 - 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;
}
 




















![[BJDCTF 2020]base??(古典密码)](https://img-blog.csdnimg.cn/direct/66178e15508c41d59b5c10beceaf1403.png)