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;
    }
};
相关推荐
xqqxqxxq16 分钟前
Java AI智能P图工具技术笔记
java·人工智能·笔记
谷雨不太卷21 分钟前
进程的状态码
java·前端·算法
顾温25 分钟前
default——C#/C++
java·c++·c#
空中海32 分钟前
02 ArkTS 语言与工程规范
java·前端·spring
楚国的小隐士41 分钟前
在AI时代,如何从0接手一个项目?
java·ai·大模型·编程·ai编程·自闭症·自闭症谱系障碍·神经多样性
凉茶钱1 小时前
【c语言】动态内存管理:malloc,calloc,realloc,柔性数组
c语言·c++·vscode·柔性数组
脏脏a1 小时前
【C++模版】泛型编程:代码复用的终极利器
开发语言·c++·c++模版
island13141 小时前
【C++仿Muduo库#3】Server 服务器模块实现上
服务器·开发语言·c++
散峰而望1 小时前
【算法竞赛】C/C++ 的输入输出你真的玩会了吗?
c语言·开发语言·数据结构·c++·算法·github
小龙报1 小时前
【C语言】内存里的 “数字变形记”:整数三码、大小端与浮点数存储真相
c语言·开发语言·c++·创业创新·学习方法·visual studio