跳转至

CString APIs

定义

CString 是一个动态字符串,用于存储字符串数据。使用此容器,可以在有限的存储空间中轻松处理字符串数据。

由以下两个成员变量存储,总共占用 16 字节:

  • data: 指向字符串数据的指针。
  • length: 字符串的长度。
  • capacity: 字符串的容量(用于实现动态扩容)。

构造函数

Note

所有构造函数都需要经过析构函数才能彻底销毁。否则会导致内存泄漏!

string()

函数原型

CString string(const char* str);

参数

  • str:字符串数据。

功能

  • 初始化一个 CString 对象,将指定的字符串数据完全复制为新的字符串。

strInit()

函数原型

CString strInit(const char ch, size_t length);

参数

  • ch:字符串的初始字符。
  • length:字符串的长度。

功能

  • 初始化一个 CString 对象,将指定的字符重复指定次数生成一个新的字符串。

示例

初始化一个长度为 5 的字符串,每个字符为 'A'。

CString str = strInit('A', 5);
printf("%s", str.data);

通过输出其字符串,得到如下结果:AAAAA

varToString()

函数原型

CString varToString(CVariant variant);

参数

  • variant:要转换的 CVariant 对象。

功能

  • 将 CVariant 对象转换为 CString 对象。

注意

variant 参数必须为 TYPE_STRING 类型,否则将返回一个空字符串。

strList()

函数原型

CString strList(const char* split, uint32_t count, ...);

参数

  • split:字符串的分隔符。
  • count:字符串的个数。
  • ...:可变参数列表,用于初始化字符串。

功能

  • 创建一个 CString 列表,将可变参数列表中的字符串数据按顺序连接为字符串。

示例

创建一个包含三个字符串的 CString 列表。

CString str = strList(" ", 3, "Use", "for", "CString!");
printf("%s", str.data);

通过输出其字符串,得到如下结果:Use for CString!

stringSub()

宏函数

#define stringSub(string, start_pos, count)             _strSub(&string, start_pos, count)

函数原型

CString _strSub(CString* str, uint32_t start_pos, uint32_t count);

参数

  • str: 待截取的字符串。
  • start_pos: 截取的起始位置。
  • count: 截取的长度。

功能

  • 初始化一个 CString 对象,并将截取到的字符串赋值给新的 CString 对象。

示例

将字符串 "Hello, World!" 中的 World 截取出来,并赋给新的 CString 对象。

CString str = string("Hello, World!");
CString substr = stringSub(str, 7, 5);
printf("%s\n", substr.data);

析构函数

destroyString()

宏函数

#define destroyString(string)                           _destroyString(&string)

函数原型

void _destroyString(CString* string);

参数

  • string:指向要销毁的 CString 对象的指针。

功能

  • 完全销毁一个 CString 对象,释放其占用的内存。

字符串修改函数

stringCopy()

宏函数

#define stringCopy(string, buffer)                      _strCopyStr(&string, buffer)

函数原型

void _strCopyStr(CString *string, const char *buffer);

参数

  • string:指向 CString 对象的指针。
  • buffer:指向要覆盖的字符串的指针。

功能

  • 将指定的字符串数据覆盖为新的 CString 对象的字符串数据。

示例

将字符串 "Hello, World!" 覆盖为 "Hello, CContainerKit!":

CString str = string("Hello, World!");
stringCopy(str, "Hello, CContainerKit!");
printf("%s", str.data);

通过输出其字符串,得到如下结果:Hello, CContainerKit!

stringInsert()

宏函数

#define stringInsert(string, index, buffer)             _strInsertStr(&string, index, buffer)

函数原型

void _strInsertStr(CString *string, uint32_t index, const char *buffer);

参数

  • string:指向 CString 对象的指针。
  • index:插入的位置。
  • buffer:指向要插入的字符串的指针。

功能

  • 在指定位置插入字符串。
  • 若该位置超出字符串的长度,则默认插入到字符串末尾。

示例

将字符串 "World!" 插入到字符串 "Hello, " 的后面。

CString str = string("Hello, ");
stringInsert(str, 7, "World!");
printf("%s", str.data);

通过输出其字符串,得到如下结果:Hello, World!

stringPushBack() / stringAppend()

宏函数

#define stringPushBack(string, buffer)                  stringInsert(string, string.length, buffer)
#define stringAppend(string, buffer)                    stringPushBack(string, buffer)

函数原型

stringInsert() 函数。

参数

  • string:指向 CString 对象的指针。
  • buffer:指向要插入的字符串的指针。

功能

  • 将字符串 buffer 插入到 CString 对象的末尾。

stringPushFront()

宏函数

#define stringPushFront(string, buffer)                 stringInsert(string, 0, buffer)

函数原型

stringInsert() 函数。

参数

  • string:指向 CString 对象的指针。
  • buffer:指向要插入的字符串的指针。

功能

  • 将字符串 buffer 插入到 CString 对象的开头。

stringRemove()

宏函数

#define stringRemove(string, index, count)              _strRemoveStr(&string, index, count)

函数原型

void _strRemoveStr(CString *string, uint32_t index, uint32_t count);

参数

  • string:指向 CString 对象的指针。
  • index:要删除的字符串的起始索引。
  • count:要删除的字符串的长度。

功能

  • 删除指定位置的字符串。
  • 若该位置超出字符串的长度,则默认不删除。
  • 若要删除的字符串长度超出字符串的长度,则默认删除字符串的剩余部分。

stringPopBack()

宏函数

#define stringPopBack(string, count)                    stringRemove(string, string.length - count, count)

函数原型

stringRemove 函数。

参数

  • string:指向 CString 对象的指针。
  • count:要删除的字符串的长度。

功能

  • 删除字符串末尾的指定长度的字符串。

stringPopFront()

宏函数

#define stringPopFront(string, count)                   stringRemove(string, 0, count)

函数原型

stringRemove() 函数。

参数

  • string:指向 CString 对象的指针。
  • count:要删除的字符串的长度。

功能

  • 删除字符串开头的指定长度的字符串。

stringUpper()

宏函数

#define stringUpper(string)                             _strUpper(&string)

函数原型

void _strUpper(CString* string);

参数

  • string:指向 CString 对象的指针。

功能

  • 将 CString 对象的字符串中的所有小写字母转换为大写。

stringLower()

宏函数

#define stringLower(string)                             _strLower(&string)

函数原型

void _strLower(CString* string);

参数

  • string:指向 CString 对象的指针。

功能

  • 将 CString 对象的字符串中的所有大写字母转换为小写。

其它函数

stringIsEqual()

宏函数

#define stringIsEqual(string, buffer, case_sensitive)   _strIsEqual(&string, buffer, case_sensitive)

函数原型

bool _strIsEqual(CString* string, const char* buffer, bool case_sensitive);

参数

  • string:指向 CString 对象的指针。
  • buffer:指向要比较的字符串的指针。
  • case_sensitive:是否区分大小写。

功能

比较 CString 对象和字符串 buffer 是否相等。

示例

比较 CString 对象和字符串 "Hello, world!" 是否相等:

CString str = string("Hello, World!");
bool ret1 = stringIsEqual(str, "Hello, world!", true);  // 区分大小写
bool ret2 = stringIsEqual(str, "hello, world!", false); // 不区分大小写
printf("ret1: %s, ret2: %s\n", ret1 ? "true" : "false", ret2 ? "true" : "false");

如上代码示例,得到的输出结果为如下:

ret1: false, ret2: true

stringIsContain()

宏函数

#define stringIsContain(string, buffer, case_sensitive) _strIsContain(&string, buffer, case_sensitive)

函数原型

bool _strIsContain(CString* string, const char* buffer, bool case_sensitive);

参数

  • string:指向 CString 对象的指针。
  • buffer:指向要比较的字符串的指针。
  • case_sensitive:是否区分大小写。

功能

  • 检查字符串是否包含指定的子字符串。

示例

比较 CString 对象中是否包含字符串 "World"

CString str = string("Hello, world!");
bool ret1 = stringIsContain(str, "World", true);    // 区分大小写
bool ret2 = stringIsContain(str, "World", false);   // 不区分大小写
printf("ret1 = %s, ret2 = %s\n", ret1 ? "true" : "false", ret2 ? "true" : "false");

按照如上代码,得到的输出结果如下:

ret1 = false, ret2 = true

stringSplit()

宏函数

#define stringSplit(string, char)                       _splitToVector(&string, char)

函数原型

CVector _splitToVector(CString* str, const char split);

参数

  • str: 指向 CString 的指针。
  • split: 分隔符 (单个字符)

功能

  • 将字符串按指定分隔符进行分割,将分割的字符串分别都转换为 TYPE_STRING 类型的 CVariant 变量存储到 CVector 中,并返回该 CVector
  • 若找不到指定分隔符,则自动创建一个仅有一个元素的 CVector

Note

  • 此函数会将字符串进行分割,但不会改变原 CString 对象里的字符串。
  • 此函数不会将原有的 CString 对象销毁!而是返回一个新的 CVector 对象。

示例

将字符串 "Hello, world!" 按空格进行分割:

CString str = string("Hello, world!");
CVector vec = stringSplit(str, ' ');
for (int i = 0; i < vec.size; ++i) {
    printVarData(vec.data[i]);
    printf("\n");
}

执行如上代码后,得到的输出结果如下:

Hello,
world!

stringToVector()

宏函数

#define stringToVector(string)                          _strToVector(&string)

函数原型

CVector _strToVector(CString* str);

参数

  • str: 指向 CString 的指针。

功能

  • 将 CString 对象转换为 CVector 对象。
  • 原有的字符串都将被拆分为一个个字符(即 TYPE_INT8 类型的 CVariant 变量),并添加到 CVector 中。

Note

  • 此函数不会将原有的 CString 对象销毁!而是返回一个新的 CVector 对象。

示例

将字符串 "Hello, world!" 转换为 CVector 对象:

CString str = string("Hello, world!");
CVector vec = stringToVector(str);
for (int i = 0; i < vec.size; ++i) {
    printVarData(vec.data[i]);
    printf(" ");
}

执行如上代码后,得到的输出结果如下:

H e l l o ,   w o r l d !