自定义字符串类实现建议
Custom string class implementation advice?
我正在编写自己的字符串类(只是为了好玩),但遇到了一些问题。我希望我的类能够处理ASCII和Unicode字符串。如果将const wchar_t*
分配给我的类,则会设置Unicode的标志。如果指定const char*
,则Unicode标志是而不是集。
此外,如果您尝试将Unicode字符附加到ASCII字符串,它将创建一个全新的Unicode字符串,或者重新分配缓冲区并将所有内容转换为Unicode(不确定我会选择哪一个)。
无论如何,关于我的问题:我想要一些类似std::string的c_str
函数的东西。显然,我有两个不同的函数,一个返回const char*
ASCII字符串,另一个返回const wchar_t*
Unicode字符串。
假设我的字符串是ASCII。如果我调用ToAsciiString()
函数,它只会返回一个指向字符串内部存储的指针,该指针不会也不应该手动释放,因为字符串dtor会自动释放。
但是,如果我想要Unicode的ASCII字符串,我可以调用ToUnicodeString()
。但这就产生了一个问题:我需要分配一个新的缓冲区来将ASCII字符串转换为。如果我这样做,那么返回的指针将需要手动delete[]
’ed,例如,这违背了std::string的c_str
的简单性。
我不知道该怎么做。
我认为您应该能够在类中维护2个缓冲区。在某些情况下,您将只有一个表示,但如果需要两个表示,则必须同时分配两个表示。
这种方法将使类的使用变得简单。在我们的时代,我们有千兆字节的RAM。这意味着,除非您需要处理大量数据,否则这种方法听起来并不荒谬。
我希望我的类能够处理ASCII和Unicode字符串。
这完全是错误的。如果希望字符串包含ASCII或Unicode字符,解决方案很简单:存储UTF-8。
根据定义,如果UTF-8字符串不包含任何后ASCII字符,那么它就是ASCII。所以你的字符串是ASCII,除非有人添加了一个大于127的代码点。没有必要来回切换;您可以使用相同的字节数组来处理它们。
此外,您似乎遵循了常见的Windows概念,即wchar_t*
表示"Unicode",char*
表示"ASCII"。他们不是。Unicode是一个描述21位代码点的含义及其关联方式的标准。21比特码点可以被存储在各种编码中。您的"Unicode"可能意味着"UTF-16"。
- 我如何在C++像在 Python 中一样实现 f 字符串?
- 是否有可能实现O(N)时间和O(1)空间解决方案,以实现C++中的字符串循环移位
- "in-situ without memory allocation" 字符串的愚蠢实现意味着什么?
- 为什么sub_match和basic_string比较运算符使用额外的字符串副本实现?
- 如何实现通用比较?(用于数字和字符串)
- 自定义哈希表实现-将字符串映射到整数时出现内存错误
- 实现一个函数,该函数将字符串作为输入并返回一个新字符串,辅音字母不替换为 "!"
- 如何正确实现 std::all_of 函数来验证字符串的一部分?
- 字符串和向量的shrink_to_fit实现不同?
- std::shared_ptr<std::string const> 可以作为引用计数的不可变字符串的有效实现吗?
- 如何使用 c++ 模板实现整数、字符串、浮点数和日期对象的数组
- 是否有很好的C 实现安全字符串
- C++实现代码中的字符串不应存在于输出二进制文件中.如何解决
- 如何实现将前缀与字符串匹配的最快算法
- C++ 将字符串值传递到实现文件时出现问题
- 在最少的操作中实现字符串所有字符的相同频率。(所有字符的范围从'a'到"z")
- WXSTRING:是否有使用类似Python3的占位符实现字符串格式化的C/C 代码
- 如何在标准模板库中实现字符串的深度同步
- 使用后缀数组和 LCP(-LR) 实现字符串模式匹配
- 实现字符串类 c++