# string **Repository Path**: clover1994/string ## Basic Information - **Project Name**: string - **Description**: 模仿QString和Python string - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-09 - **Last Updated**: 2025-06-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## string 模仿QString和Python string。目前只使用ai完全了基础部分。其他还需要慢慢考虑。 ## first todo - [ ] utf-8 - [ ] COW - [ ] simd - [ ] i18n - [ ] thread safe ## more to do check list 以下是基于全网资料整理的**QString/PyString功能检查清单**,涵盖所有需要实现的功能点(按优先级排序): ### **一、核心功能实现** #### **1. 构造函数与初始化** - [ ] 支持空字符串构造 `PyString()` - [ ] 支持 `const char*` 构造(UTF-8/ASCII兼容) - [ ] 支持 `std::string` 构造 - [ ] 支持 `QString` 构造 - [ ] 支持字符重复构造 `PyString(char ch, int count)` - [ ] 支持迭代器范围构造(如 `std::vector`) - [ ] 支持隐式转换(移除 `explicit` 关键字) #### **2. 基础属性与操作** - [ ] `size()`/`length()` 返回字符数(非字节数) - [ ] `empty()` 判断空字符串 - [ ] `clear()` 清空字符串 - [ ] `reserve()` 预分配内存 - [ ] `capacity()` 返回当前分配容量 - [ ] `shrink_to_fit()` 释放未使用内存 - [ ] `operator[]` 访问字符(支持 `const` 和非 `const`) - [ ] `at()` 带边界检查的字符访问 #### **3. 字符串修改** - [ ] `append()`/`+=` 添加字符串 - [ ] `prepend()` 前置添加字符串 - [ ] `insert()` 在指定位置插入字符/字符串 - [ ] `remove()` 删除指定位置的字符 - [ ] `replace()` 替换子串 - [ ] `resize()` 调整字符串长度(支持填充字符) #### **4. 比较与查找** - [ ] `operator==`/`operator!=` 字符串比较 - [ ] `operator<`/`operator>` 字典序比较 - [ ] `indexOf(const PyString& sub)` 查找子串首次出现位置 - [ ] `lastIndexOf(const PyString& sub)` 查找子串最后出现位置 - [ ] `contains(const PyString& sub)` 判断是否包含子串 #### **5. 子串与切片** - [ ] `substr(int pos, int len)` 提取子串 - [ ] `mid(int pos, int len)` 类似 `substr`,支持负数索引 - [ ] `left(int len)` 提取左侧 `len` 个字符 - [ ] `right(int len)` 提取右侧 `len` 个字符 #### **6. 转换与格式化** - [ ] `toUpper()` 转换为大写 - [ ] `toLower()` 转换为小写 - [ ] `toStdString()` 转换为 `std::string` - [ ] `toQString()` 转换为 `QString` - [ ] `sprintf` 风格格式化(如 `format(const char* fmt, ...)`) - [ ] `f-strings` 风格格式化(需实现模板解析) #### **7. 内存管理** - [ ] 隐式共享(写时复制,COW) - [ ] 小字符串优化(SSO,如15字节内栈存储) - [ ] 避免不必要的内存分配(如 `reserve()` 预分配) ### **二、编码与国际化支持** #### **1. UTF-8 核心支持** - [ ] 正确处理多字节UTF-8字符(如中文、emoji) - [ ] `utf8Length()` 返回UTF-8字符数(非字节数) - [ ] `midUtf8(int pos, int len)` 基于UTF-8字符的子串截取 - [ ] 实现UTF-8状态机检测字节边界 - [ ] 提供 `toUtf8()` 和 `fromUtf8()` 编码转换接口 #### **2. ICU 集成** - [ ] 支持Unicode规范化(NFC/NFD/NFKC/NFKD) - [ ] 实现ICU的大小写转换(如土耳其语 `i` 的特殊规则) - [ ] 基于ICU的文本排序(`collate` 方法) - [ ] ICU的分词功能(`segmentWords`) - [ ] 集成ICU的 `UnicodeString` 和 `Collator` #### **3. 国际化扩展** - [ ] 本地化数字/日期格式化(`toLocaleString`) - [ ] 支持多语言文本的排序和比较 - [ ] 集成 `QTextCodec` 处理其他编码(如GBK、ISO-8859-1) ### **三、Python风格方法** #### **1. 字符串处理** - [ ] `strip()`/`lstrip()`/`rstrip()` 移除空白或指定字符 - [ ] `split(const PyString& sep)` 按分隔符分割字符串 - [ ] `splitlines()` 按行分割字符串 - [ ] `join(const std::vector& parts)` 连接字符串列表 - [ ] `replace(const PyString& old, const PyString& new)` 替换子串 #### **2. 检测与查询** - [ ] `startswith(const PyString& prefix)` 检查前缀 - [ ] `endswith(const PyString& suffix)` 检查后缀 - [ ] `count(const PyString& sub)` 统计子串出现次数 - [ ] `find(const PyString& sub)` 查找子串(返回索引或-1) - [ ] `rfind(const PyString& sub)` 反向查找子串 #### **3. 字符检测** - [ ] `isalnum()` 检查是否全为字母或数字 - [ ] `isalpha()` 检查是否全为字母 - [ ] `isdecimal()` 检查是否全为十进制字符 - [ ] `isdigit()` 检查是否全为数字 - [ ] `isidentifier()` 检查是否为合法标识符 - [ ] `islower()`/`isupper()` 检查大小写 - [ ] `isnumeric()` 检查是否全为数字字符 - [ ] `isspace()` 检查是否全为空白字符 #### **4. 其他方法** - [ ] `capitalize()` 首字母大写 - [ ] `casefold()` 大小写折叠(适合Unicode比较) - [ ] `center(int width)` 居中对齐 - [ ] `expandtabs(int tabsize)` 替换制表符为空格 - [ ] `partition(const PyString& sep)` 分割为三部分 - [ ] `swapcase()` 大小写互换 - [ ] `title()` 转换为标题格式 - [ ] `zfill(int width)` 左侧补零 ### **四、性能优化** #### **1. SIMD 加速** - [ ] 使用SIMD指令优化字符串比较(如SSE4.2的 `PCMPISTRI`) - [ ] 实现SIMD并行查找(如AVX2的256位指令) - [ ] 分块处理长字符串(如每16字节一组) - [ ] 循环展开减少分支预测失败 - [ ] 处理边界情况(字符串长度非SIMD宽度整数倍) #### **2. 内存优化** - [ ] 隐式共享(COW)减少拷贝 - [ ] 小字符串优化(SSO)避免堆分配 - [ ] 预分配内存(`reserve()`)减少重分配次数 #### **3. 算法优化** - [ ] 使用Boyer-Moore或Knuth-Morris-Pratt算法加速查找 - [ ] 批量操作合并(如多次 `append` 合并为单次内存分配) ### **五、异常安全与线程安全** #### **1. 异常安全** - [ ] 确保所有操作满足强异常安全保证 - [ ] 使用RAII管理资源(如智能指针) - [ ] 内存分配失败时抛出 `std::bad_alloc` #### **2. 线程安全** - [ ] 添加读写锁(`QReadWriteLock`)保护共享数据 - [ ] 标记线程安全的方法(如 `const` 方法为线程安全) - [ ] 避免隐式共享导致的竞态条件 ### **六、测试覆盖** #### **1. 单元测试** - [ ] 基础功能测试(构造、赋值、比较) - [ ] UTF-8字符处理测试(长度、子串、边界) - [ ] ICU集成测试(大小写、排序、规范化) - [ ] SIMD优化测试(正确性与性能对比) - [ ] Python风格方法测试(`split`、`strip`、`replace`) #### **2. 边界测试** - [ ] 空字符串操作 - [ ] 超长字符串(如1GB) - [ ] 特殊Unicode字符(零宽空格、代理对) - [ ] 内存不足场景(`std::bad_alloc` 测试) #### **3. 性能测试** - [ ] 比较SIMD优化前后的执行时间 - [ ] 测试COW机制的内存使用效率 - [ ] 压力测试(如百万次字符串拼接) ### **七、其他功能** #### **1. 迭代器支持** - [ ] 提供 `begin()`/`end()` 迭代器 - [ ] 支持 `const_iterator` 和 `reverse_iterator` - [ ] 确保迭代器在非 `const` 操作后失效 #### **2. 文件操作** - [ ] 从文件读取字符串(`fromFile(const QString& path)`) - [ ] 写入字符串到文件(`toFile(const QString& path)`) #### **3. 自定义Allocator** - [ ] 支持自定义内存分配器 - [ ] 与STL容器兼容(如 `std::vector`) ### **八、国际化与本地化** #### **1. 翻译支持** - [ ] 提取可翻译字符串(`tr()` 方法) - [ ] 集成 `gettext` 或类似工具生成翻译文件 - [ ] 支持多语言切换(`installTranslator()`) #### **2. 本地化格式** - [ ] 本地化数字格式(如千位分隔符) - [ ] 本地化日期时间格式 - [ ] 区域敏感的字符串排序 ### **实现优先级建议** 1. **核心功能**(基础构造、比较、修改) 2. **UTF-8支持**(正确处理多字节字符) 3. **Python风格方法**(`split`、`strip`、`replace`) 4. **ICU集成**(国际化排序、规范化) 5. **SIMD优化**(性能敏感操作) 6. **异常安全与线程安全** 7. **测试覆盖** 8. **其他扩展功能**(文件操作、自定义Allocator) 通过逐项实现上述功能点,QString/PyString类将具备完整的字符串处理能力,满足现代软件开发的需求。