【strlen】
函数说明:C 库函数 size_t strlen(const char *str) 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
int my_strlen(const char *str)//测试字符字符串长度 { int count = 0; while (*str) { count++; str++; } return count; } int my_strlen1(const char *str)//应用递归测试字符串长度 { if (*str == '0') return 0; else return 1 + my_strlen1(str + 1); } int my_strlen2(const char *str)//利用两个指针分别指向字符串的头部和尾部,长度就是两指针之差 { char*p = str; while (*p != '\0') { p++; } return p - str; }
【strcpy】
函数说明:C 库函数 char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest。
char *my_strcpy(char *dest, const char*src) { char *ret = dest; assert(dest != NULL); assert(src != NULL); while ((*dest = *src)) { dest++; src++; } return ret;//因为ret是char*类型的,所以返回值类型是char*类型的。 }
【strcat】
函数说明:C 库函数 char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
char *my_strcat(char *dest, const char*src)//字符串拼接函数,将src拼接在dest后面,并且覆盖dest最后的\0. { assert(dest!=NULL); assert(src!= NULL); char*ret = dest; while (*dest) { dest++; } while (*dest = *src) { dest++; src++; } return ret; }
【strstr】
函数说明:C 库函数 char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 '\0'。
char *my_strstr(const char *str1, const char*str2)//函数功能:判断str2是否为str1的子串,如果是则返回cp,如果不是则返回NULL. { assert(str1); assert(str2); char *cp = (char*)str1;// char *substr = (char*)str2; //定义两个指针*cp, *substr的原因:由于str1, str2都是const修饰的,不能对其进行修改。 char*s1 = NULL; if (*str2 == '/0') return NULL; while (*cp) { s1 = cp; substr = str2; if (*s1&&*substr && (*s1 == *substr));//判断字符串是否相等 { s1++; substr++; } if (*substr == '/0') { return cp; } cp++; } }
【strcmp】
函数说明:C 库函数 int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较。
参数
- str1 -- 要进行比较的第一个字符串。
- str2 -- 要进行比较的第二个字符串。
返回值
该函数返回值如下:
- 如果返回值 < 0,则表示 str1 小于 str2。
- 如果返回值 > 0,则表示 str2 小于 str1。
- 如果返回值 = 0,则表示 str1 等于 str2。
int my_strcmp(const char *src, const char *dest) { int ret; while ((ret = *(unsigned char *)src - *(unsigned char*)dest) && dest) { src++; dest++; } if (ret < 0) ret = -1; else if (ret>0) ret = 1; else if (ret = 0) ret = 0; return(ret); }
【memcpy】
函数说明:C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字符到存储区 str1
void*memcpy(void*dest, const void*src, size_t count)//strcmp不会考虑其内存相互重叠的问题 { void*ret = dest; while (count--) { *(char*)dest = *(char*)src;//memcpy是按字节拷贝 dest = (char*)dest + 1; src = (char*)src + 1; } return(ret); }
【memmove】
函数说明:C 库函数 void *memmove(void *str1, const void *str2, size_t n) 从 str2 复制 n 个字符到 str1,但是在重叠内存块这方面,memmove() 是比 memcpy() 更安全的方法。如果目标区域和源区域有重叠的话,memmove() 能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。如果目标区域与源区域没有重叠,则和 memcpy() 函数功能相同。
void *memmove(void *dest, const*src, size_t count) { void *ret = dest; if (dest <= src || (char*)dest >= ((char*)src + count))//dest和src的内存区域没有重叠的情况下 { while (count--) *(char*)dest = *(char*)src; dest = (char*)dest + 1; src = (char*)src + 1; } else//出现dest和src有内存区域重叠的情况 { dest = (char*)dest + count - 1; src = (char*)dest + count - 1; while (count--) { *(char*)dest = *(char*)src; dest = (char*)dest - 1; src = (char*)src - 1; } } return (ret); }