C++流模拟JavaSplit

C++流模拟JavaStringSplit

在写二叉树序列化和反序列化时,C++并没有直接提供类似Java字符串split这样的字符串分割函数,但是可以用流的思想来模拟该函数。主要涉及的头文件有和。

中的getline函数可以读取整行输入,它的一个构造函数可以读取流中以任意字符分割的token。

而中的istringstream可以

arduino 复制代码
istringstream stream(str); // 将字符串包装为输入流

那么结合以上两点,我们就可以写出如下代码:

ini 复制代码
class serializationAndDeserialiation {
public:
    class Node {
    public:
        int value;
        Node* left;
        Node* right;
​
        Node(int data) : value(data), left(nullptr), right(nullptr) {};
    };
​
    string serialByPre(Node* head) {
        if (head == nullptr) {
            return "#_";
        }
        string res = to_string(head->value) + "_";
        res += serialByPre(head->left);
        res += serialByPre(head->right);
        return res;
    }
​
    Node* deserialByPre(string prestr) {
​
        //C++实现split
        vector<string> tokens;
        istringstream stream(prestr); // 将字符串包装为输入流
        string token;
​
        // 按分隔符读取
        while (getline(stream, token, '_')) {
            tokens.push_back(token);
        }
        return deserialPre(tokens);
    }
​
    Node* deserialPre(vector<string>tokens) {
        if (tokens.empty()) {
            return nullptr;
        }
        string value = tokens.front();
        tokens.erase(tokens.begin());
        if (value == "#") {
            return nullptr;
        }
        //注意new的使用
        /*
        Node* head;
        head  = &Node(stoi(value));
        */
        Node* head = new Node(stoi(value));
        head->left = deserialPre(tokens);
        head->right = deserialPre(tokens);
        return head;
    }
};
相关推荐
墨染点香几秒前
LeetCode 刷题【68. 文本左右对齐】
算法·leetcode·职场和发展
GalaxyPokemon2 分钟前
LeetCode - 202. 快乐数
算法·leetcode·职场和发展
吃着火锅x唱着歌4 分钟前
LeetCode 522.最长特殊序列2
算法·leetcode·职场和发展
初级炼丹师(爱说实话版)6 分钟前
2025算法八股——机器学习——SVM损失函数
算法·机器学习·支持向量机
qq_4696035898 分钟前
2026新选题:基于K-Means实现学生求职意向聚类推荐职位
算法·kmeans·聚类·聚类算法·k-means聚类推荐
RTC老炮14 分钟前
webrtc弱网-LossBasedBweV2类源码分析与算法原理
算法·webrtc
NMZH1015 分钟前
排序算法(全--C语言)
算法·排序算法
十五年专注C++开发17 分钟前
cargs: 一个轻量级跨平台命令行参数解析库
linux·c++·windows·跨平台·命令行参数解析
宁静致远202117 分钟前
【C++设计模式】第二篇:策略模式(Strategy)--从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析
c++·设计模式·策略模式
王伯安呢26 分钟前
Java开发环境配置入门指南
java·开发语言·jvm·eclipse·环境搭建·新手