C++学习笔记——输入输出的格式

一、输入格式

  • 输入数值和定长数组
cpp 复制代码
int n;
cin>>n;
vector<int> nums(n);
for(int i=0;i<n;i++){
    cin>>nums[i];
}

// 5
// 0 1 2 3 4 
  • 输入不定长数组
cpp 复制代码
vector<int> nums;
int x;
while(cin>>x) nums.push_back(x);

// 1 2 3 4 5 6
  • 输入字符串(以行为单位)
cpp 复制代码
string s;
string p;
getline(cin,s); //读取一行字符串
getline(cin,p);

// abcdef
// asfdgh
  • 输入字符串,根据空格划分子字符串
cpp 复制代码
string input;
getline(cin,input); 
istringstream iss(input); //输入字符串流(把字符串当作输入源来读)
string token;
vector<string> st;
while(iss>>token){ //从字符串流 iss 中读取一个单词(遇到空格自动停止),存到 token
    st.push_back(token);
}

二、输出格式

  • 输出数组(不能直接输出,必须按顺序遍历)
cpp 复制代码
vector<int> nums = {1,2,3,4,5};
for(int i=0;i<nums.size();i++){
    cout<<nums[i]<<" ";
}
// 输出:1 2 3 4 5 
  • 输出字符串
cpp 复制代码
string s = "abcde";
cout<<s<<endl;

// 输出:abcde

三、链表构造

  1. 输入节点值数组

如:输入 1 2 4 5 6 8

cpp 复制代码
#include<iostream>
#include<vector>
using namespace std;

struct ListNode{
    int val;
    ListNode* next;
    ListNode(int val):val(val),next(nullptr){}
};

ListNode* buildList(vector<int>& nums){
    if(nums.size()==0) return nullptr;
    ListNode* head = new ListNode(nums[0]);
    ListNode* cur = head;
    for(int i=1;i<nums.size();i++){
        ListNode* temp = new ListNode(nums[i]);
        cur->next = temp;
        cur = temp;
    }
    return head;
}

int main(){
    vector<int> nums;
    int x;
    while(cin>>x) nums.push_back(x);
    ListNode* head = buildList(nums);
    return 0;
}

四、二叉树构造

  1. 输入完整层序遍历数组(空节点为-1,所有空节点都输入)

如:输入 1 -1 2 -1 -1 3

cpp 复制代码
// 构造节点
struct Node{
    Node* left;
    Node* right;
    int val;
    Node(int v):val(v),left(nullptr),right(nullptr){}
};

// 构造二叉树
Node* buildTree(vector<int>& nums){
    if(nums.size()==0 || nums[0]==-1) return nullptr;
    vector<Node*> node(nums.size(),nullptr);
    node[0] = new Node(nums[0]);
    for(int i=1;i<nums.size();i++){
        int p = (i-1)/2; //父节点下标为(i-1)/2
        if(nums[i]!=-1 && node[p]!=nullptr){
            //当本节点i不为空且父节点p不为空时,建立节点
            node[i] = new Node(nums[i]);
            //节点p的左节点2*p+1,节点p的右节点2*p+2
            if(i==p*2+1) node[p]->left = node[i];
            else node[p]->right = node[i];
        }
    }
    return node[0];
}

int main(){
    vector<int> nums;
    int x;
    while(cin>>x) nums.push_back(x);
    Node* root = buildTree(nums);
    return 0;
}
  1. 输入层序遍历字符串(空节点为"null")

如:输入 1 null 2 3

cpp 复制代码
#include<iostream>
#include<vector>
#include<queue>
#include<sstream>
using namespace std;

// 构造节点
struct Node{
    Node* left;
    Node* right;
    int val;
    Node(int val):val(val),left(nullptr),right(nullptr){}
};

// 构造二叉树(层序遍历反推)
Node* buildTree(vector<string>& st){
    if(st.size()==0 || st[0]=="null") return nullptr;
    Node* head = new Node(stoi(st[0])); //构造头节点
    queue<Node*> q; //队列
    q.push(head);
    int i=1;
    while(i<st.size()){ //遍历每个数组元素,依次为队列中元素的左/右节点
        Node* cur = q.front();
        q.pop();
        if(i<st.size() && st[i]!="null"){ //若不为null则建新节点,并加入队列
            cur->left = new Node(stoi(st[i]));
            q.push(cur->left);
        }
        i++;
        if(i<st.size() && st[i]!="null"){
            cur->right = new Node(stoi(st[i]));
            q.push(cur->right);
        }
        i++;
    }
    return head;
}

int main(){
    string input;
    getline(cin,input);
    istringstream iss(input);
    string token;
    vector<string> st;
    while(iss>>token){
        st.push_back(token);
    }

    Node* head = buildTree(st);
    return 0;
}
相关推荐
RD_daoyi5 分钟前
Google SEO 第六周:外链建设与网站权重提升 —— 让排名直冲首页的终极推力
大数据·学习·搜索引擎
AI_零食6 分钟前
甄嬛人物日志-朗读升级 - 鸿蒙PC Electron框架完整技术实现指南
前端·学习·华为·electron·鸿蒙·鸿蒙系统
智者知已应修善业8 分钟前
【51单片机0.1秒计时到21.0时点亮LED】2024-1-5
c++·经验分享·笔记·算法·51单片机
AeeeSs9 分钟前
web shell
笔记
zh路西法16 分钟前
【rosbridge-websocket】跨网络的ROS1与ROS2通讯法(上)
linux·网络·c++·python·websocket·网络协议
j7~18 分钟前
【C++】类和对象(下)--详解之再探构造函数,友元,static成员,类型转换等
开发语言·c++·类型转换·友元·匿名对象·内部类·编译器优化
稷下元歌19 分钟前
7天学会plc加机器视觉关于运动控制部份,配套视频在bib
开发语言·c++·git·vscode·python·docker·pip
薇茗20 分钟前
【C++】 类与对象 基础篇
开发语言·c++·基础语法·类与对象
虎符饼干21 分钟前
从选词到布局优化,实现搜索引擎自然排名上涨
笔记
段一凡-华北理工大学23 分钟前
工业领域的Hadoop架构学习~系列文章17:Hadoop性能调优- 调度集群每一分性能
大数据·人工智能·hadoop·分布式·学习·架构·高炉炼铁