/* * 功能简介:比较两个整数的大小,返回小者 * 参 数:a 整数1,b 整数2 * 返 回 值:返回值较小的数字 */ int min(int a, int b) { return a > b ? b : a; } /* * 功能简介:比较两个整数的大小,返回大者 * 参 数:a 整数1,b 整数2 * 返 回 值:返回值较大的数字 */ int max(int a, int b) { return a > b ? a : b; } /* * 功能简介:把数字字符转成整数 * 参 数:ch 待转换为数字的字符 * 返 回 值:如果字符为数字字符,则返回对应数字,否则返回-1 */ int ctoi(const char ch) { if(ch >= '0' && ch <= '9') return (ch - '0'); return -1; } /* * 功能简介:求x的y次幂 * 参 数:x 底数,y 指数(幂) * 返 回 值:返回x的y次幂 */ unsigned long _pow(const unsigned int x,unsigned const int y) { int i = 0; int ret = 1; if(y == 0) return 1; for(i = 0; i < y; ++i) { ret = ret * x; } return ret; } /* * 功能简介:字符串转整数,遇到非数字字符则结束循环 * 参 数:nptr 需要转换为数字的字符串 * 返 回 值:转换成功返回对应整数,否则返回0 */ int _atoi(const char *nptr) { int ret = 0; char sign = 0; // 符号标志 int i = 0; const char *p = nptr; // 判断是否为负数字符串,即需满足第一个字符为符号,第二个字符为数字字符 if(*nptr == '-' && (*(nptr+1) >= '0' && *(nptr+1) <= '9') ) { ++p; sign = 1; }; for(i = 0; (*p != ' ') && (*p >= '0' && *p <= '9'); ++i) { ret = 10 * ret + ((*p++) - '0'); } if(sign == 1 && ret != 0) ret = 0 - ret; return ret; } /* * 功能简介:字符串转长整型,遇到非数字字符则结束循环 * 参 数:nptr 需要转换为数字的字符串 * 返 回 值:转换成功返回对应整数,否则返回0 */ long _atol(const char *nptr) { long ret = 0; char sign = 0; // 符号标志 int i = 0; const char *p = nptr; // 判断是否为负数字符串,即需满足第一个字符为符号,第二个字符为数字字符 if(*nptr == '-' && (*(nptr+1) >= '0' && *(nptr+1) <= '9') ) { ++p; sign = 1; }; for(i = 0; (*p != ' ') && (*p >= '0' && *p <= '9'); ++i) { ret = 10 * ret + ((*p++) - '0'); } if(sign == 1 && ret != 0) // 取反 ret = 0 - ret; return ret; } // 若ch是大写字母('A'-'Z')或('a'-'z')或('0'-'9')返回非0,否则返回0。 int _isalnum(int ch) { if((ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'z') ) return !0; return 0; } // 若ch是'0'-'9'返回非0,否则返回0。 int _isdigit(int ch) { if((ch >= '0' && ch <= '9')) return !0; return 0; } // 若ch是字母('A'-'Z')或('a'-'z')返回非0,否则返回0。 int _isalpha(int ch) { if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'z') ) return !0; return 0; } // 若ch是大写返回非0值,否则返回0。 int _isupper(int ch) { if(ch >= 'A' && ch <= 'Z') return !0; return 0; } // 若ch是小写返回非0值,否则返回0。 int _islower(int ch) { if(ch >= 'a' && ch <= 'z') return !0; return 0; } // 若ch是大写字母('A'-'Z')返回相应的小写字母('a'-'z')。 int _tolower(int ch) { if(ch >= 'A' && ch <= 'Z') return ch - 'A' + 'a'; return ch; } // 若ch是小写字母('a'-'z')返回相应的大写字母('A'-'Z') int _toupper(int ch) { if(ch >= 'a' && ch <= 'z') return ch - 'a' + 'A'; return ch; } int _ctoi(const char ch) { if(ch >= '0' && ch <= '9') return ch - '0'; return -1; } // 取绝对值 double _fabs(const double x) { if(x >= 0) return x; return 0-x; } // 四舍五入 double _round(const double x) { long ret = 0; if(x >= 0) ret = x + 0.5; else ret = x - 0.5; return ret; } // 向上取整数 double _ceil(const double x) { long tmp; if(x > 0) { tmp = (long)x; if(tmp != x) tmp = tmp + 1; return tmp; } else { tmp = (long)x; return tmp; } } // 向下取整数 double _floor(const double x) { long tmp; if(x > 0) { tmp = (long)x; } else { tmp = (long)x; if(tmp != x) tmp = tmp - 1; } return tmp; } // 把双精度val分解成整数部分和小数部分,整数部分存放在ip所指的变量中,返回小数部分 double _modf(double val,double *ip) { long tmp = val; if(ip != NULL) (*ip) = tmp; return val - tmp; } size_t _strlen(const char *str) { size_t nlen = 0; while(*str++ != ' ') ++nlen; return nlen; } char * _strcpy(char *dest, const char *src) { while(*src != ' ') *dest++ = *src++; *dest = ' '; return dest; } char * _strncpy(char *dest, const char *src, size_t len) { size_t i = 0; size_t src_len = _strlen(src); if(src_len > len) src_len = len; while(i < src_len) { dest[i] = src[i]; ++i; } dest[i] = ' '; return dest; } char * _strcat(char *dest, const char *src) { int dest_len = _strlen(dest); int i = 0; while(src[i] != ' ') { dest[dest_len + i] = src[i]; ++i; } dest[i] = ' '; return dest; } char * _strncat(char *dest, const char *src, size_t len) { size_t dest_len = _strlen(dest); size_t src_len = _strlen(src); size_t i = 0; if(src_len > len) src_len = len; while(i < src_len) { dest[dest_len + i] = src[i]; ++i; } dest[dest_len + i] = ' '; return dest; } char * _strchr(const char *s, const int c) { size_t len = _strlen(s); size_t i = 0; while(i < len) { if(s[i] == c) return (char *)(&(s[i])); ++i; } return NULL; } char * _strrchr(const char *s, const int c) { size_t len = _strlen(s); size_t i = len - 1; while(i >= 0) { if(s[i] == c) return (char *)(&(s[i])); --i; } return NULL; } int _strcmp(const char *s1, const char *s2) { int i = 0; size_t len = 0; size_t s1_len = _strlen(s1); size_t s2_len = _strlen(s2); if(s1_len > s2_len) len = s2_len; else len = s1_len; for(i = 0; i < len; ++i) { if(s1[i] == s2[i]) continue; else break; } if((i == len) && (s1_len == s2_len)) return 0; if(s1[i] > s2[i]) return 1; return -1; } int _strncmp(const char *s1, const char *s2, const size_t n) { int i = 0; for(i = 0; i < n; ++i) { if(s1[i] == s2[i]) continue; else break; } if(i == n) return 0; else if(s1[i] > s2[i]) return 1; return -1; } char * _strstr(const char *str, const char * substr) { char *pos = (char *) str; // 待搜索字符串的位置。 char *pos1 = 0; while (1) { if (pos[0] == 0) break; // 如果待搜索的字符串已结束,break。 pos1 = _strchr(pos,substr[0]); // 在pos中查找子字符串的首字符。 if (pos1 == 0) return 0; // 如果没有找到,直接返回0。 if (_strncmp(pos1, substr, _strlen(substr)) == 0) return pos1; // 如果找到了,返回找到的地址。 pos++; // 待搜索的位置后移一个字节。 } return NULL; } // 安全版本的字符串拷贝函数 char * _strcpy_s(char *dest, const size_t destlen, const char *src) { size_t src_len = _strlen(src); size_t len = destlen; size_t i = 0; if(src_len < len) len = src_len; memset(dest, 0, destlen); for(i = 0; i < len; ++i) { dest[i] = src[i]; } return dest; } // 安全版本的字符串拷贝函数 char * _strncpy_s(char *dest, const size_t destlen, const char *src, const size_t n) { size_t len = destlen; size_t i = 0; if(n < len) len = n; memset(dest, 0, destlen); for(i = 0; i < len; ++i) { dest[i] = src[i]; } return dest; } // 安全版本的字符串连接函数 char * _strcat_s(char *dest, const size_t destlen, const char *src) { int i = 0; int src_len = _strlen(src); int len = destlen - _strlen(dest) - 1; // 剩余可用空间 int start = _strlen(dest); memset(dest + start, 0, len); if(src_len < len) len = src_len; for(i = 0; i < len; ++i) { dest[start + i] = src[i]; } return dest; } // 安全版本的字符串连接函数 char * _strncat_s(char *dest, const size_t destlen, const char *src, const size_t n) { int i = 0; int len = destlen - _strlen(dest) - 1; // 剩余可用空间 int start = _strlen(dest); memset(dest + start, 0, len); if(n < len) len = n; for(i = 0; i < len; ++i) { dest[start + i] = src[i]; } return dest; } // 删除字符串左边指定的字符 void delete_lchar(char *str,const char in_char) { char strTemp[_strlen(str)+1]; int iTemp=0; if (str == 0) return; if (_strlen(str) == 0) return; memset(strTemp,0,sizeof(strTemp)); strcpy(strTemp,str); while ( strTemp[iTemp] == in_char ) iTemp++; memset(str,0,strlen(str)+1); strcpy(str,strTemp+iTemp); return; } // 删除字符串右边指定的字符 void delete_rchar(char *str,const char in_char) { size_t len = _strlen(str); if(str == NULL) return; while(len > 0) { if(str[--len] == in_char) str[len] = ' '; else break; } } // 删除字符串两边指定的字符 void delete_lr_char(char *str,const char in_char) { delete_lchar(str, in_char); delete_rchar(str, in_char); } // 删除字符串中间的字符串 void delete_mid_str(char *str,const char *in_str) { int i = 0; int nlen = 0; char *p = NULL; if(str == NULL || in_str == NULL) return; nlen = _strlen(in_str); if(_strlen(str) == 0 || nlen == 0) return; p = _strstr(str, in_str); if(p != NULL) _strcpy(p, p + nlen); }