在本文中,为了避免命名冲突,改变了函数的名称(如:strlen改为strLen),另一篇文章中采用命名空间来解决此问题(strlen, strcpy, strcmp函数的实现,另外,此篇文章中的代码实现也更加紧凑)(此句话添加于2012/10/04)
/** * mystr.h * string function prototype * @author : MJN * @create : 2011/11/28 * @update : 2011/11/28 */ #include <stddef.h> /* include size_t */ char *strCpy(char *strDst, const char *strSrc); size_t strLen(const char *str); int strCmp(const char *str1, const char *str2);
/** * mystr.c * string function * @author : MJN * @create : 2011/11/28 * @update : 2011/11/28 */ #include "mystr.h" /** * @function : copy from strSrc to strDst(include '\0') * @return : address of strDst * @author : MJN * @create : 2011/11/02 * @update : 2011/11/02 */ char *strCpy(char *strDst, const char *strSrc) { //assert((strDst != NULL) && (strSrc != NULL)); char *address = strDst; while ((*strDst++ = *strSrc++) != '\0') { ; } return address; } /** * @function : count the number of characters(before '\0') * @return : the number of characters * @author : MJN * @create : 2011/11/02 * @update : 2011/11/02 */ size_t strLen(const char *str) { size_t len = 0; while ((*str++) != '\0') { len++; } return len; } /** * @function : compare two string * @return : * if str1 = str2 return 0 * if str1 > str2 return 1 * if str1 < str2 return -1 * @author : MJN * @create : 2011/11/02 * @update : 2011/11/02 */ int strCmp(const char *str1, const char *str2) { int i = 0; while(str1[i] != '\0' && str2[i] != '\0' && str1[i] == str2[i]) { i++; } /* if str1[i] == str2[i], means they all equal to '\0' */ return (str1[i] == str2[i] ? 0 : (str1[i] > str2[i] ? 1 : -1)); }
注:
测试环境:Microsoft Visual Studio 2010