C++,LeetCode算法题的字符串输入处理

文章目录

  • 24. 算法
    • 24.1. 二叉树输入处理,包括建树、打印树、释放树。
    • 24.2. 单链表输入处理,包括建链(头插、尾插)、打印链、释放链。
    • 24.3. 一维矩阵输入处理。
    • 24.4. 二维矩阵输入处理。
    • 24.5. 调用函数输入处理。

24. 算法

24.1. 二叉树输入处理,包括建树、打印树、释放树。

include<iostream>
#include <queue>
#include<sstream> //istringstream
using namespace std;//结点
struct Node
{int val;Node* left;Node* right;Node() :val(0), left(nullptr), right(nullptr) {}; //空结点Node(int value):val(value), left(nullptr), right(nullptr) {}; //有值结点
};//使用字符串流用于分割字符串
//建二叉树
Node* buildTree(istringstream& iss)
{string token="";if (!(iss >> token) || token == "null") return nullptr; //字符串流是空或者null时,直接返回空指针Node* root = new Node(stoi(token)); //新建根结点并入队queue<Node*>Q;Q.push(root);while (iss >> token) //新建当前节点的左右节点{Node* node = Q.front();Q.pop();if (token != "null"){node->left = new Node(stoi(token));Q.push(node->left);}if (!(iss >> token))break;if (token != "null"){node->right = new Node(stoi(token));Q.push(node->right);}}return root;
}//释放二叉树
void deleteTree(Node* root)
{if (!root) return;deleteTree(root->left); //释放左子树deleteTree(root->right);//释放右子树delete root; //释放当前结点并置空root = nullptr;
}//打印二叉树-层次遍历
void display(Node* root)
{if (!root) return;queue<Node*>Q;Q.push(root);while (!Q.empty()){int n = Q.size();while (n--){auto node = Q.front();Q.pop();if (node) //如果结点存在,输出结点值并将左右结点入队{cout << node->val << " ";Q.push(node->left);Q.push(node->right);}else //如果结点不存在,输出nullcout << "null ";}cout << endl; //一层一行}}int main()
{/*string s = "1 2 3 4 5 null 6 7 null null null null 8";*/string s;getline(cin, s); //控制台输入字符串istringstream iss(s); Node* root = buildTree(iss); //建树display(root); //打印树deleteTree(root); //释放树return 0;
};

24.2. 单链表输入处理,包括建链(头插、尾插)、打印链、释放链。

istringstream 默认以空格作为分隔符来划分字符串,但可以使用 getline()指定分隔符。

#include<iostream>
#include<sstream>
using namespace std;//结点
struct Node
{int val;Node* next;Node() :val(0), next(nullptr) {}; //空结点Node(int value):val(value), next(nullptr) {}; //有值结点,尾插Node(int value, Node* next):val(value),next(next){} //有值结点,头插
};//建单链表-头插法
Node* insertHead(istringstream& iss)
{string token = "";if (!(getline(iss, token, ','))) return nullptr; //字符串流是空,直接返回空指针Node* head = new Node(stoi(token)); //新建第一个结点Node* cur = head;while (getline(iss, token, ',')) //新建其余结点cur = new Node(stoi(token),cur);return cur; //返回当前结点
}//建单链表-尾插法
Node* insertTail(istringstream& iss)
{string token="";if (!(getline(iss,token,','))) return nullptr; //字符串流是空,直接返回空指针Node* head = new Node(stoi(token)); //新建第一个结点Node* cur = head;while (getline(iss, token, ',')) //新建其余结点{cur->next= new Node(stoi(token));cur = cur->next;}return head; //返回第一个结点
}//释放单链表
void deleteList(Node* head)
{if (!head) return;while (head){auto cur = head;head = head->next;delete cur; //释放结点并置空cur = nullptr;}
}//打印单链表
void display(Node* head)
{if (!head) return;while (head){cout<<head->val<<" ";head = head->next;}cout <<endl;
}int main()
{/*string s = "[1,2,3,4]"*/string s;getline(cin, s); //控制台输入字符串s = s.substr(1, s.length() - 2); //去除首尾方括号istringstream iss(s);Node* head = insertTail(iss); //建链display(head); //打印链deleteList(head); //释放链return 0;
};

24.3. 一维矩阵输入处理。

#include<iostream>
#include <vector>
#include<sstream>
using namespace std;int main()
{string s = "[1,2,3,4]";//string s;//getline(cin, s); //控制台输入字符串s = s.substr(1, s.length() - 2); //去除首尾方括号istringstream iss(s); string token = "";vector<int>v;while (getline(iss, token, ','))//分割字符串并存放进数组v.emplace_back(stoi(token)); for (auto&& u : v) //打印数组cout << u << " ";return 0;
};

24.4. 二维矩阵输入处理。

可以使用嵌套的 std::istringstream。

#include<iostream>
#include <vector>
#include<sstream>
using namespace std;int main()
{string s = "[[1,3,5,7],[10,11,16,20],[23,30,34,60]]";//string s;//getline(cin, s); //控制台输入字符串s = s.substr(1, s.length() - 2); //去除首尾方括号istringstream iss(s);string token = "";vector<vector<int>>v;while (getline(iss, token, '[')) //以'['分割字符串,对应行{if (token.empty()) continue; //跳过空字符串istringstream in_iss(token);string in_token = "";vector<int>in_v;//如"7]"转7 是因为stoi()会提取开头的数字部分并将其转换为整数。while(getline(in_iss,in_token,',')) //以','分割字符串,对应列in_v.emplace_back(stoi(in_token));v.emplace_back(in_v); }for (auto&& in_v : v) //打印二维数组{for (auto&& u : in_v)cout << u << " ";cout << endl;}return 0;
};

24.5. 调用函数输入处理。

最小栈,设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈,实现 MinStack 类。

#include<iostream>
#include<stack>
#include<vector>
#include<sstream>
using namespace std;class MinStack {
private:stack<int>st,minst; //使用栈辅助检索最小元素public:MinStack() { minst.push(INT_MAX); }void push(int val) {//当前元素-对应栈中最小元素if (val < minst.top())minst.push(val);elseminst.push(minst.top());st.push(val);}void pop() {//同时出栈minst.pop();st.pop();}int top() { return st.top(); }int getMin() { return minst.top();}
};int main()
{string scall = R"( ["MinStack","push","push","push","getMin","pop","top","getMin"] )"; //R"()"是一种原始字符串字面量的写法。string snum = "[[],[-2],[0],[-3],[],[],[],[]]";//string scall,snum;//getline(cin, scall); //getline(cin,snum); //控制台输入字符串snum.erase(remove(snum.begin(), snum.end(), '['),snum.end()); snum.erase(remove(snum.begin(), snum.end(), ']'), snum.end()); //snum去除'['和']'istringstream iss(snum);string token = "";vector<int>v;while (getline(iss, token, ',')) //snum以','分割字符串并存放进数组{if (token.empty()) continue; //跳过空字符串v.emplace_back(stoi(token)); }scall = scall.substr(2, scall.length() - 4); //scall去除首"(["和尾"])"scall.erase(remove(scall.begin(), scall.end(), '"'), scall.end()); //scall去除'"'istringstream iss2(scall);int size = v.size(), i = 0;static MinStack minStack; //声明成静态,保证只初始化一次while (getline(iss2, token, ',')) //scall以','分割字符串并调用{if (token == "MinStack"){minStack = MinStack();cout << "null,";}else if (token == "push"){minStack.push(v[i++]);cout << "null,";}else if (token == "getMin"){cout << minStack.getMin() << ",";}else if (token == "pop"){minStack.pop();cout << "null,";}else if (token == "top"){cout<<minStack.top() << ",";}}return 0;
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/839871.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文了解基于ITIL的运维管理体系框架

本文来自腾讯蓝鲸智云社区用户&#xff1a;CanWay ITIL&#xff08;Information Technology Infrastructure Library&#xff09;是全球最广泛使用的 IT 服务管理方法&#xff0c;旨在帮助组织充分利用其技术基础设施和云服务来实现增长和转型。优化IT运维&#xff0c;作为企业…

Docker 容器间通讯

1、虚拟ip/访问 同一网络 安装docker时&#xff0c;docker会默认创建一个内部的桥接网络docker0&#xff0c;每创建一个容器分配一个虚拟网卡&#xff0c;容器之间(包括宿主机)可以根据分配的ip互相访问(ps:其他主机(包括其他主机的容器)无法ping通docker容器ip无法访问&#…

安卓手机APP开发__蓝牙功能概述

安卓手机&#xff21;&#xff30;&#xff30;开发&#xff3f;&#xff3f;蓝牙功能概述 目录 概述 基本内容 关键的类和接口 概述 安卓平台支持了蓝牙网络栈&#xff0c;它允许一个设备和其它的蓝牙设备进行无线的交换数据。 &#xff21;&#xff30;&#xff30;的框架…

【qt】标准项模型

标准项模型 一.使用标准型项模型1.应用场景2.界面拖放3.创建模型4.配套模型5.视图设置模型6.视图属性的设置 二.从文件中拿到数据1.文件对话框获取文件名2.创建文件对象并初始化3.打开文件对象4.创建文本流并初始化5.读取文本流6.关闭文件7.完整代码 三.为模型添加数据1.自定义…

pytorch在docker里面使用GPU

本博客主要介绍如何在容器里面使用pytorch进行推理&#xff0c;训练&#xff0c;同时用上GPU。 1. 前置条件&#xff0c;安装好docker。 2. 安装nvidia-container-toolkit 参考官方文档&#xff1a; Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit 1.…

mysql实战——半同步复制搭建

一、搭建前准备 主库 192.168.1.78 从库 192.168.1.76 二、搭建 1、先搭建异步复制 MySQL实战——主从异步复制搭建&#xff08;一主一从&#xff09;-CSDN博客 2、在异步的基础上搭建半同步复制 主库 mysql>install plugin rpl_semi_sync_slave soname semisy…

ctfshow web入门 其他 web396--web412

web396 <?php error_reporting(0); if(isset($_GET[url])){$url parse_url($_GET[url]);shell_exec(echo .$url[host].> .$url[path]);}else{highlight_file(__FILE__); } shell_exec(echo .$url[host].> .$url[path]); 这个是将url的host写入path,也就是说我们的pa…

el-table-column两种方法处理特殊字段,插槽和函数

问题&#xff1a;后端返回的字段为数字 解决办法&#xff1a; {{ row[item.prop] 1 ? "启用" : "禁用" }} {{ row[item.prop] }} 最终果&#xff1a; 另外&#xff1a;如果多种状态时可用函数 {{ getStatus(row[item.prop]) }} {{ row[item.prop…

IO游戏设计思路

1、TCP ,UDP ,KCP ,QUIC TCP 协议最常用的协议 UDP协议非常规的协议&#xff0c;因为需要在线广播&#xff0c;貌似运营商会有一些影响 KCP 基于UDP的协议&#xff0c;GitHub - l42111996/java-Kcp: 基于java的netty实现的可靠udp网络库(kcp算法)&#xff0c;包含fec实现&am…

WEB攻防【2】——ASPX/.NET项目/DLL反编译/未授权访问/配置调试报错

ASP&#xff1a;windowsiisaspaccess .net&#xff1a;windowsiisaspxsqlserver IIS上的安全问题也会影响到 WEB漏洞&#xff1a;本身源码上的问题 服务漏洞&#xff1a;1、中间件 2、数据库 3、第三方软件 #知识点: 1、.NET:配置调试-信息泄绵 2、.NET:源码反编译-DLL…

【openlayers系统学习】3.5colormap详解(颜色映射)

五、colormap详解&#xff08;颜色映射&#xff09; ​colormap​ 包是一个很好的实用程序库&#xff0c;用于创建颜色图。该库已作为项目的依赖项添加&#xff08;1.7美化&#xff08;设置style&#xff09;&#xff09;。要导入它&#xff0c;请编辑 main.js​ 以包含以下行…

Flutter 中的 CupertinoActivityIndicator 小部件:全面指南

Flutter 中的 CupertinoActivityIndicator 小部件&#xff1a;全面指南 在Flutter中&#xff0c;CupertinoActivityIndicator是用于iOS风格的应用程序中的一个活动指示器小部件。它提供了一个简单的、具有动画效果的旋转轮&#xff0c;用来向用户表示应用程序正在处理某些任务…

【Numpy】深入解析numpy.mat()函数

numpy.mat()&#xff1a;深入探索NumPy中的矩阵类 &#x1f308; 欢迎莅临我的个人主页&#x1f448;这里是我深耕Python编程、机器学习和自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;并乐于分享知识与经验的小天地&#xff01;&#x1f387; &#x1f393; 博主简…

Spring Cloud 系列之Gateway:(9)初识网关

传送门 Spring Cloud Alibaba系列之nacos&#xff1a;(1)安装 Spring Cloud Alibaba系列之nacos&#xff1a;(2)单机模式支持mysql Spring Cloud Alibaba系列之nacos&#xff1a;(3)服务注册发现 Spring Cloud 系列之OpenFeign&#xff1a;(4)集成OpenFeign Spring Cloud …

使用霍尔效应传感或磁场传感技术的应用

随着支持技术的增强&#xff0c;使用霍尔效应传感或磁场传感技术的应用目前已变得有效。本技术文档介绍了霍尔效应技术&#xff0c;并对应用进行了回顾&#xff0c;特别是区分霍尔传感器 IC 的主要类型以及它们可以支持的各种传感行为。此外&#xff0c;它还探讨了一些使能技术…

Spring Cache基本使用

Spring 从 3.1 版本开始定义缓存抽象来统一不同的缓存技术&#xff1b;在应用层面与后端存储之间&#xff0c;提供了一层抽象&#xff0c;这层抽象目的在于封装各种可插拔的后端存储( ehcache, redis, guava)&#xff0c;最小化因为缓存给现有业务代码带来的侵入。 一、Spring…

linux 内核安装、切换版本,禁用内核更新

安装内核 版本5.15.0-105 sudo apt-get install linux-image-5.15.0-105-generic sudo apt-get install linux-headers-5.15.0-105-generic切换内核版本 #查看已安装内核版本 grep menuentry /boot/grub/grub.cfg sudo dpkg --get-selections |grep linux-image#修改文件/etc…

Vue从入门到实战Day11

一、为什么要学Vue3 Vue3官网&#xff1a;简介 | Vue.js 1. Vue3的优势 2. Vue2选项式API vs Vue3组合式API 示例&#xff1a; 二、create-vue搭建Vue3项目 1. 认识create-vue create-vue是Vue官方新的脚手架工具&#xff0c;底层切换到了vite(下一代构建工具)&#xff0c;为…

语法检查、语义检查的区别

语法检查和语义检查是编译过程中的两道手序。区别如下&#xff1a; 1&#xff0e;语法检查&#xff08;Syntax Checking&#xff09; 语法检查是第一道检查&#xff0c;就像英语的语法一样&#xff0c;它检查的是存不存在语法错语。 最常见的语法错误是错别字&#xff08;if…

jenkins插件之Warnings

Warnings插件&#xff0c;收集静态分析工具报告的编译器警告或问题&#xff0c;并将结果可视化。它内置了对许多编译器的支持&#xff08;cpp&#xff0c;clang&#xff0c;java等&#xff09;和工具&#xff08;spotbugs&#xff0c;pmd&#xff0c;checkstyle&#xff0c;esl…