常用字符串函数, LIB-ZC

LIB-ZC 封装了常用字符串函数

字符操作,类别判定

都是宏, 实验性质

ztolower(int ch)字符转小写
ztoupper(int ch)字符转大写
zisalnum(int ch)字符是否是字母或数字
zisalpha(int ch)字符是否是字母
zislower(int ch)字符是否是小写
zisupper(int ch)字符是否是大写
zisdigit(int ch)字符是否是数字
zisxdigit(int ch)字符是否是 16 进制数字 既: 0-9a-hA-H
zhexval(int ch)16 进制字符转 10 进制, 其他字符返回 -1
zistrim(int ch)字符是否是可以 trim 掉的

字符串函数

char *zstr_toupper(char *str);
char *zstr_tolower(char *str);

字符串大写(小写)转换

char *ztrim_left(const char *str);
char *ztrim_right(char *str);
char *ztrim(char *str);

trim; 举例:

char *zskip_left(const char *str, const char *ignores);
int zskip_right(const char *str, int len, const char *ignores);
int zskip(const char *str, int len, const char *ignores_left, const char *ignores_right, char **start);

skip; 举例:

单位转换函数

int zstr_to_bool(const char *s, int def);

转bool值; 详细:

long zstr_to_second(const char *s, long def);

转秒值(时间); 支持 h/H(小时), m/M(分), s/S(秒), d/D(天), w/W(周); 如:
"1026S" => 1026, "8h"=> (8*3600), "3W" => (3*24*3600), "" => def

long zstr_to_size(const char *s, long def);

转size值; 支持 g/G(G), m/M(兆), k/K(千), b/B(字节); 如:
"9M" => (9*1024*1024), "100k" => (100*1024), "" => def

strtok

zstrtok_t 功能类似 strtok, 不过 zstrtok_t 不复制内存

数据结构

struct zstrtok_t {
    char *sstr;
    char *str;
    int len;
};

void zstrtok_init(zstrtok_t *k, const char *sstr)

初始化; sstr 是需要操作的字符串

zstrtok_t *zstrtok(zstrtok_t *k, const char *delim)

delim 是分隔符(和strtok类似);

返回 0: 表示没找到; 否则找到了(k->str 是地址; k->len 是长度)

例子

京ICP备18054515号-2 eli960@qq.com qq: 1537212398