1.获取字符串的长度(strlen)
//计数器方式
int mystrlen(const char* str) {
assert(str); //包含头文件<assert.h>,下同
int cnt = 0;
while (*str++) {
++cnt;
}
return cnt;
}
//递归方式
int mystrlen(const char* str) {
assert(str);
if (*str == '\0')
return 0;
else
return 1 + mystrlen(str + 1);
}
//指针相减方式
int mystrlen(char* str) {
assert(str);
char* p = str;
while (*p) {
++p;
}
return p - str;
}
2.复制一个字符串(strcpy)
char* mystrcpy(char* dest, const char* src) {
assert(dest && src);
while (*dest++ = *src++);
return dest;
}
3.连接字符串(strcat)
char* mystrcat(char* dest, const char* src) {
assert(dest && src);
char* p = dest;
while (*p) {
++p;
}
while (*p++ = *src++);
return dest;
}
4.比较两个字符串(strcmp)
int mystrcmp(const char* s1, const char* s2) {
assert(s1 && s2);
while (*s1 && *s2) {
if (*s1 < *s2) {
return -1;
}
else if (*s1 > *s2) {
return 1;
}
else {
++s1;
++s2;
}
}
//此时s1和s2至少有一个遇到了'\0'
if (*s1 < *s2) {
return -1;
}
else if (*s1 > *s2) {
return 1;
}
else {
return 0;
}
}
5.找到子字符串(strstr)
const char* mystrstr(const char* str1, const char* str2) {
assert(str1 && str2);
const char* pleft = str1;
const char* substr = str2;
if (*str2 == '\0')
return NULL;
while (*pleft)
{
const char* pright = pleft;
while (*pright && *substr && (*pright == *substr))
{
pright++;
substr++;
}
if (*substr == '\0')
return pleft;
pleft++;
}
return NULL;
}