字符串

头文件

mln_string.h

模块名

string

主要数据结构

typedef struct {
    mln_u8ptr_t  data; //数据存放的内存起始地址
    mln_u64_t    len; //数据字节长度
    mln_uauto_t  data_ref:1; //data是否是引用
    mln_uauto_t  pool:1; //本结构是否是由内存池分配
    mln_uauto_t  ref:30; //本结构所被引用的次数
} mln_string_t;

函数/宏列表

mln_string

mln_string(str)

描述:利用字符串常量str创建一个mln_string_t对象。用于定义mln_string_t变量的同时对其进行初始化。

返回值:mln_string_t类型结构体

举例:

void foo()
{
  mln_string_t s = mln_string("Hello");
}

mln_string_set

mln_string_set(pstr, s)

描述:用于将s这个字符串赋值给pstr这个mln_string_t指针所指向的结构。此时,data_ref成员会被置1。

返回值:无

举例:

void foo()
{
  char text[] = "hello";
  mln_string_t s;
  mln_string_set(&s, text);
}

mln_string_nset

mln_string_nset(pstr, s, n)

描述:与mln_string_set功能一样,只是pstr所指向的mln_string_t仅记录了s的前n个字节。

返回值:无

举例:

void foo()
{
  char text[] = "hello world";
  mln_string_t s;
  mln_string_nset(&s, text, 5); //利用mln_log的%S进行输出时,仅会输出hello
}

mln_string_ref

mln_string_ref(pstr)

描述:将pstr所指向的mln_string_t结构的ref成员累加1,用于直接引用pstr这个内存结构。在释放内存时,引用计数大于1时是不会实际释放内存的。

返回值:mln_string_t类型指针

void foo(mln_string_t s)
{
  mln_string_t *ref = mln_string_ref(s); //此时ref与s的内存地址完全相同
  ...
}

mln_string_free

mln_string_free(pstr)

描述:释放ptrs所指向的mln_string_t结构内存,若ref大于1则仅递减引用计数,若data_ref为1,则不释放data成员指向的内存,否则释放data成员内存,随后释放pstr内存。释放时,会根据pool成员判断是释放回内存池,还是返还malloc库。

返回值:无

mln_string_new

mln_string_t *mln_string_new(const char *s);

描述:根据字符串常量s创建字符串结构,此时新字符串结构及其数据部分内存均由malloc库进行分配,并将s的内容拷贝进data成员中。

返回值:成功则返回mln_string_t指针,否则返回NULL

mln_string_pool_new

mln_string_t *mln_string_pool_new(mln_alloc_t *pool, const char *s);

描述:与mln_string_new功能一致,仅内存是由pool所指向的内存池中分配而来。

返回值:成功则返回mln_string_t指针,否则返回NULL

mln_string_buf_new

mln_string_t *mln_string_buf_new(mln_u8ptr_t buf, mln_u64_t len);

描述:利用buflen作为字符串内容,创建一个字符串结构。注意buf应是通过malloc族函数进行分配而来的,且不可在外部进行释放。

返回值:成功则返回mln_string_t指针,否则返回NULL

mln_string_buf_pool_new

mln_string_t *mln_string_buf_pool_new(mln_alloc_t *pool, mln_u8ptr_t buf, mln_u64_t len);

描述:利用buflen作为字符串内容,创建一个字符串结构。注意buf应是从pool中分配而来的,且不可在外部进行释放。

返回值:成功则返回mln_string_t指针,否则返回NULL

mln_string_dup

mln_string_t *mln_string_dup(mln_string_t *str);

描述:完全复制一份str,其内存均由malloc进行分配。

返回值:成功则返回mln_string_t指针,否则返回NULL

mln_string_pool_dup

mln_string_t *mln_string_pool_dup(mln_alloc_t *pool, mln_string_t *str);

描述:与mln_string_dup功能一致,仅内存是从pool所指向的内存池中分配而来。

返回值:成功则返回mln_string_t指针,否则返回NULL

mln_string_alloc

mln_string_t *mln_string_alloc(mln_s32_t size);

描述:创建一个新字符串对象,并预分配size字节的缓冲区。

返回值:成功则返回mln_string_t指针,否则返回NULL

mln_string_pool_alloc

mln_string_t *mln_string_pool_alloc(mln_alloc_t *pool, mln_s32_t size);

描述:创建一个新字符串对象,并预分配size字节的缓冲区。与mln_string_alloc的差异在于所有内存均从内存池pool中分配。

返回值:成功则返回mln_string_t指针,否则返回NULL

mln_string_const_ndup

mln_string_t *mln_string_const_ndup(char *str, mln_s32_t size);

描述:创建一个新字符串对象,并仅复制str中前size个字节数据。

返回值:成功则返回mln_string_t指针,否则返回NULL

mln_string_ref_dup

mln_string_t *mln_string_ref_dup(mln_string_t *str);

描述:创建一个新的字符串结构,但结构中的data成员指向strdata成员所指向的地址,且新结构中data_ref会被置位。

返回值:成功则返回mln_string_t指针,否则返回NULL

mln_string_const_ref_dup

mln_string_t *mln_string_const_ref_dup(char *s);

描述:创建一个新的字符串结构,但结构中的data成员指向s,且新结构中data_ref会被置位。

返回值:成功则返回mln_string_t指针,否则返回NULL

mln_string_strseqcmp

int mln_string_strseqcmp(mln_string_t *s1, mln_string_t *s2);

描述:比较s1s2的数据,如果短的一方刚好与长的一方的前面完全匹配,则长的一方大于短的一方。

返回值:

  • -1 - s1s2
  • 1 - s1s2
  • 0 - 二者相同

举例:

int main(void)
{
  mln_string_t s1 = mln_string("abcd");
  mln_string_t s2 = mln_string("abcdefg");
  printf("%d", mln_string_strseqcmp(&s1, &s2)); //-1
  return 0;
}

mln_string_strcmp

int mln_string_strcmp(mln_string_t *s1, mln_string_t *s2);

描述:比较s1s2中数据的大小。

返回值:

  • -1 - s1s2
  • 1 - s1s2
  • 0 - 二者相同

mln_string_const_strcmp

int mln_string_const_strcmp(mln_string_t *s1, char *s2);

描述:比较s1所记录的数据与s2的大小。

返回值:

  • -1 - s1s2
  • 1 - s1s2
  • 0 - 二者相同

mln_string_strncmp

int mln_string_strncmp(mln_string_t *s1, mln_string_t *s2, mln_u32_t n);

描述:比较s1s2的前n个字节的大小。

返回值:

  • -1 - s1s2
  • 1 - s1s2
  • 0 - 二者相同

mln_string_const_strncmp

int mln_string_const_strncmp(mln_string_t *s1, char *s2, mln_u32_t n);

描述:比较s1所记录的数据与s2的前n个字节的大小。

返回值:

  • -1 - s1s2
  • 1 - s1s2
  • 0 - 二者相同

mln_string_strcasecmp

int mln_string_strcasecmp(mln_string_t *s1, mln_string_t *s2);

描述:比较s1s2数据的大小,且忽略大小写。

返回值:

  • -1 - s1s2
  • 1 - s1s2
  • 0 - 二者相同

mln_string_const_strcasecmp

int mln_string_const_strcasecmp(mln_string_t *s1, char *s2);

描述:比较s1所记录的数据与s2的大小,且忽略大小写。

返回值:

  • -1 - s1s2
  • 1 - s1s2
  • 0 - 二者相同

mln_string_const_strncasecmp

int mln_string_const_strncasecmp(mln_string_t *s1, char *s2, mln_u32_t n);

描述:比较s1所记录的数据与s2的前n个字节的大小,且忽略大小写。

返回值:

  • -1 - s1s2
  • 1 - s1s2
  • 0 - 二者相同

mln_string_strncasecmp

int mln_string_strncasecmp(mln_string_t *s1, mln_string_t *s2, mln_u32_t n);

描述:比较s1s2所记录数据的前n个字节的大小,且忽略大小写。

返回值:

  • -1 - s1s2
  • 1 - s1s2
  • 0 - 二者相同

mln_string_strstr

char *mln_string_strstr(mln_string_t *text, mln_string_t *pattern);

描述:匹配text所记录的数据中与pattern中数据一样的起始地址。

返回值:若匹配成功,则返回textdata成员所指向地址中的对应地址;否则返回NULL

mln_string_const_strstr

char *mln_string_const_strstr(mln_string_t *text, char *pattern);

描述:匹配text所记录的数据中与pattern一样的起始地址。

返回值:若匹配成功,则返回textdata成员所指向地址中的对应地址;否则返回NULL

mln_string_new_strstr

mln_string_t *mln_string_new_strstr(mln_string_t *text, mln_string_t *pattern);

描述:与mln_string_strstr功能一致,但返回的是由mln_string_t结构包装后的字符串。

返回值:成功则返回mln_string_t指针,否则返回NULL

mln_string_new_const_strstr

mln_string_t *mln_string_new_const_strstr(mln_string_t *text, char *pattern);

描述:与mln_string_const_strstr功能一致,但返回的是由mln_string_t结构包装后的字符串。

返回值:成功则返回mln_string_t指针,否则返回NULL

mln_string_kmp

char *mln_string_kmp(mln_string_t *text, mln_string_t *pattern);

描述:与mln_string_strstr功能一致,但是是由KMP算法实现的。KMP算法适用场景是,text中有较多与pattern前缀相同的字符串的情况。例如: text中包含aaaaaaaaaabcpattern中包含ab,此时,KMP算法性能将高于朴素算法。

返回值:若匹配成功,则返回textdata成员所指向地址中的对应地址;否则返回NULL

mln_string_const_kmp

char *mln_string_const_kmp(mln_string_t *text, char *pattern);

描述:与mln_string_kmp功能一致,但pattern为字符指针类型。

返回值:若匹配成功,则返回textdata成员所指向地址中的对应地址;否则返回NULL

mln_string_new_kmp

mln_string_t *mln_string_new_kmp(mln_string_t *text, mln_string_t *pattern);

描述:与mln_string_kmp功能一致,但返回的是由mln_string_t结构包装后的数据。

返回值:成功则返回mln_string_t指针,失败则返回NULL

mln_string_new_const_kmp

mln_string_t *mln_string_new_const_kmp(mln_string_t *text, char *pattern);

描述:与mln_string_const_kmp功能一致,但返回的是由mln_string_t结构包装后的数据。

返回值:成功则返回mln_string_t指针,失败则返回NULL

mln_string_slice

mln_string_t *mln_string_slice(mln_string_t *s, const char *sep_array/*ended by \0*/);

描述:seq_array是一个字符数组且以0结尾,该数组的每一个字符都是一个分隔标志。函数会扫描s的数据部分,当数据中遇到seq_array中的任意一个字符时都会被进行分割,连续遇到多个时仅分割一次,且分割后,分隔符不会出现在被分割后的字符串中。

返回值:成功则返回mln_string_t数组,否则返回NULL。数组的最后一个元素的len0

举例:

int main(void)
{
  mln_string_t s = mln_string("abc-def-=ghi");
  mln_string_t *str, *arr = mln_string_slice(&s, "-=");
  for (str = arr; str->len; ++str) {
    mln_log(debug, "%S", str);
  }
  mln_string_slice_free(arr);
  return 0;
}

mln_string_slice_free

void mln_string_slice_free(mln_string_t *array);

描述:释放由mln_string_slice函数创建的mln_string_t数组。

返回值:无

mln_string_strcat

mln_string_t *mln_string_strcat(mln_string_t *s1, mln_string_t *s2);

描述:创建一个新的mln_string_t结构,其数据为s1s2依此顺序拼接后的结果。

返回值:成功则返回mln_string_t指针,否则返回NULL

mln_string_pool_strcat

mln_string_t *mln_string_pool_strcat(mln_alloc_t *pool, mln_string_t *s1, mln_string_t *s2);

描述:与mln_string_strcat功能一致,仅新的结构所使用内存由pool指向的内存池分配。

返回值:成功则返回mln_string_t指针,否则返回NULL

mln_string_trim

mln_string_t *mln_string_trim(mln_string_t *s, mln_string_t *mask);

描述:去除字符串首尾处的由mask指定的空白字符(或者其他字符)。

返回值:由堆上分配的去除后的字符串mln_string_t指针。

mln_string_pool_trim

mln_string_t *mln_string_pool_trim(mln_alloc_t *pool, mln_string_t *s, mln_string_t *mask);

描述:与mln_string_trim功能相同。

返回值:由pool指定的内存池上分配的去除后的字符串mln_string_t指针。

mln_string_upper

void mln_string_upper(mln_string_t *s);

描述:将字符串s中的所有英文字母转换为大写。

返回值:无

mln_string_lower

void mln_string_lower(mln_string_t *s);

描述:将字符串s中的所有英文字母转换为小写。

返回值:无

results matching ""

    No results matching ""