探索;实践的BLOG - 2025年3月
type: channel
link: https://blog.eptansuo.life/index.php/2025/03/
description: 一个简单的个人博客, 可以通过邮件eptansuo@126.com与我联系
items: PString——模仿Python内置`str`类型行为的C++库

PString——模仿Python内置`str`类型行为的C++库
type: item
date: 2025-03-18T11:05:49+08:00
description: 0. 简介在使用C++进行字符串操作时，诸如拆分（split）、拼接（join）以及去除空白字符（strip）等操作相对繁琐。为了解决这一问题，我开发了PString，一个模仿Python内置str类型行为的C++库，以更直观、便捷地处理字符串操作。仓库地址：https://github.com/EPTansuo/PString1. 使用样例PString实现了Python中str类型的所有方法，示例如下：#include <iostream> #include <pstring.h> int main(){ PString str = " Hello, World! "; // Python风格的split操作 auto str_split = str.split(","); std::cout << str_split[0].upper() << std::endl; // Python风格的join操作 auto str_joined = PString(":").join(str_split); std::cout << str_joined << std::endl; // Python风格的slice操作 auto str_sliced = str.slice(6, 1, -1); std::cout << str_sliced << std::endl; // Python风格的strip操作 auto str_stripped = str.strip(); std::cout << str_stripped << std::endl; }2. 功能验证与测试为了确保PString的功能准确性，我通过pybind11将C++实现的PString绑定至Python环境，再与Python原生str类型进行功能对比测试。具体对比测试代码位于difftest/test.py中，如下所示：... difftest(test_str, py_str.upper(), ps_str.upper(), "upper") ...局限性当前的PString实现本质上是对std::string进行增强，底层为单字节操作，因此尚不支持Unicode字符处理。这意味着目前版本无法处理多字节的UTF-8编码字符。目前尚未有支持Unicode的打算。