📄 gcfstr.c
字号:
/* GCFSTR.C -- General C functions for string processing M.L.Y 1998.10.07 MODIFIED (YYYY.MM.DD) M.L.Y 1998.10.07 - Creation M.L.Y 1999.06.22 - Add ASCII_SB_to_GB_DB() M.L.Y 1999.06.23 - Add Str_ASB2GBDB() trimAstr() trimGBstr() padr() padl() GBpadr() GBpadl()*/#include "GCFSTR.H"/* ------------------------------------------------------------------------- */void * strmovcpy(void * dest, void * src, size_t n)/* 字符串拷贝: 将 src 的 n 个字节复制到 dest, 且在 dest 之后加上 NUL 返回 dest*/{ memmove(dest, src, n); *((char *) dest + n) = '\0'; return dest;}/* ------------------------------------------------------------------------- */USGC * ltrimstr(USGC * str)/* 将字符串 str 左边的空白字符(空格、tab、回车、换行、换页)去掉 返回 str M.L.Y 1995.04.15, 11.23*/{ int i, j, n; n = strlen((char *) str); for (i = 0; i < n; i++) { if (str[i] != ' ' && str[i] != '\t' && str[i] != '\n' && str[i] != '\r' && str[i] != '\f') break; } if (i > 0) { for (j = 0; ; i++, j++) { str[j] = str[i]; if (str[j] == '\0') break; } } return str;}/* ------------------------------------------------------------------------- */USGC * rtrimstr(USGC * str)/* 将字符串 str 右边的空白字符(空格、tab、回车、换行、换页)去掉 返回 str M.L.Y 1995.04.15, 08.23*/{ int i; for (i = strlen((char *) str) - 1; i >= 0; i--) if (str[i] == ' ' || str[i] == '\t' || str[i] == '\n' || str[i] == '\r' || str[i] == '\f') str[i] = '\0'; else break; return str;}/* ------------------------------------------------------------------------- */USGC * trimstr(USGC * str)/* 将字符串 str 左边和右边的空白字符(空格、tab、回车、换行、换页)去掉 返回 str*/{ return(ltrimstr(rtrimstr(str)));}/* ------------------------------------------------------------------------- */USGC * upperstr(USGC * str)/* 将字符串 str 中的字母变为大写 返回 str M.L.Y 1995.04.15, 11.23*/{ int i, n; n = strlen((char *) str); for (i = 0; i < n; i++) str[i] = toupper(str[i]); return str;}/* ------------------------------------------------------------------------- */USGC * lowerstr(USGC * str)/* 将字符串 str 中的字母变为小写 返回 str M.L.Y 1995.04.15, 11.23*/{ int i, n; n = strlen((char *) str); for (i = 0; i < n; i++) str[i] = tolower(str[i]); return str;}/* ------------------------------------------------------------------------- */int sprintf_end(void * buffer, void * fmt, ...)/* 仿照 printf 的输出追加到 buffer 字符串的尾部 sprintf to buffer end M.L.Y 1999.6.2*/{ char tmpstr1[8192]; va_list arg_ptr; va_start(arg_ptr, fmt); vsprintf(tmpstr1, fmt, arg_ptr); va_end(arg_ptr); strcat(buffer, tmpstr1); return 0;}/* ------------------------------------------------------------------------- */USGC * ASCII_SB_to_GB_DB(char c1, USGC * GB_DB)/* 将ASCII单字节的字符(c1)按GB2312-80标准转换为双字节字符(GB_DB)并返回, 如 1->1, A->A M.L.Y 1999.06.22*/{ if (c1 == 0x20)/* ' ' */ { GB_DB[0] = 0xA1; GB_DB[1] = 0xA1; GB_DB[2] = NUL; return GB_DB; } if (c1 == 0x24)/* $ */ { GB_DB[0] = 0xA1; GB_DB[1] = 0xE7; GB_DB[2] = NUL; return GB_DB; } if (c1 > 0x20 && c1 < 0x7F) { GB_DB[0] = 0xA3; GB_DB[1] = 0x80 + c1; GB_DB[2] = NUL; return GB_DB; } else return NULL;}/* ------------------------------------------------------------------------- */USGC * Str_ASB2GBDB(USGC * strfrom, USGC * strto)/* 将ASCII字符串strfrom转换为strto,其中单字节的字符按GB2312-80标准转换为双字节字符, 如 1->1, A->A M.L.Y 1999.06.23*/{ USGC GB_DB[3] = {0x20, 0x20, NUL}; int i, j, n; for (i = 0, j = 0, n = strlen((char *) strfrom); i < n; i++) { if (strfrom[i] >= 0x20 && strfrom[i] < 0x7F) { ASCII_SB_to_GB_DB(strfrom[i], GB_DB); strto[j++] = GB_DB[0]; strto[j++] = GB_DB[1]; } else strto[j++] = strfrom[i]; } strto[j] = NUL; return strto;}/* ------------------------------------------------------------------------- */USGC * trimAstr(USGC * str)/* Trim ASCII string and return str White space includes 0x20, 0x09, 0x0D, 0x0A, 0x0C M.L.Y 1999.06.23*/{ int i; for (i = strlen((char *) str) - 1; i >= 0; i--) if (str[i] == 0x20 || str[i] == 0x09 || str[i] == 0x0D || str[i] == 0x0A || str[i] == 0x0C) str[i] = NUL; else break; return str;}/* ------------------------------------------------------------------------- */USGC * trimGBstr(USGC * str)/* Trim ASCII string contained GB DBCS and return str White space includes 0x20, 0x09, 0x0D, 0x0A, 0x0C, 0xA1A1 M.L.Y 1999.06.23*/{ int i; for (i = strlen((char *) str) - 1; i >= 0; i--) { if (str[i] == 0x20 || str[i] == 0x09 || str[i] == 0x0D || str[i] == 0x0A || str[i] == 0x0C) str[i] = NUL; else { if (str[i] == 0xA1 && i > 0 && str[i - 1] == 0xA1) str[--i] = NUL; else break; } } return str;}/* ------------------------------------------------------------------------- */USGC * padr(USGC * str1, int len, USGC pad_char)/* Pad right using pad_char to length len Return str1 If str1 length > len, not change str1 M.L.Y 1998.9.10*/{ int n; n = strlen((char *) str1); if (n < len) { memset(str1 + n, pad_char, len - n); str1[len] = NUL; } return str1;}/* ------------------------------------------------------------------------- */USGC * padl(USGC * str1, int len, USGC pad_char)/* Pad left using pad_char to length len Return str1 If str1 length > len, not change str1 M.L.Y 1998.9.10*/{ int n; USGC * p1; n = strlen((char *) str1); if (n < len) { p1 = str1 - n + len; memmove(p1, str1, n + 1); memset(str1, pad_char, len - n); } return str1;}/* ------------------------------------------------------------------------- */USGC * GBpadr(USGC * str1, int len)/* ASCII string str1: pad right using 0xA1A1 to length len Return str1 If str1 length > len or invalid, return NULL M.L.Y 1999.06.23*/{ int n; n = strlen((char *) str1); if (n > len || (len - n) % 2 != 0) return NULL; if (n < len) { memset(str1 + n, 0xA1, len - n); str1[len] = NUL; } return str1;}/* ------------------------------------------------------------------------- */USGC * GBpadl(USGC * str1, int len)/* ASCII string str1: pad left using 0xA1A1 to length len Return str1 If str1 length > len or invalid, return NULL M.L.Y 1999.06.23*/{ int n; USGC * p1; n = strlen((char *) str1); if (n > len || (len - n) % 2 != 0) return NULL; if (n < len) { p1 = str1 - n + len; memmove(p1, str1, n + 1); memset(str1, 0xA1, len - n); } return str1;}/* End of file */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -