strlen 字符串长度
int my_strlen(char* str)
{
assert(str);
//递归实现
//if (*str != '\0')
// return (1 + my_strlen(str + 1));
//return count;
//非递归实现
int count = 0;
while (*str != '\0')
{
str++;
count++;
}
return count;
}
int main()
{
char *str = "abcdef";
int ret = my_strlen(str);
printf("%d\n", ret);
system("pause");
return 0;
}
strcpy 字符串拷贝
char* my_strcpy(char* dst, const char* src)
{
assert(dst);
assert(src);
char* ret = dst;
while (*dst++ = *src++)
{
;
}
return ret;
}
int main()
{
char dst[] = "abcdef";
char *src = "1234";
my_strcpy(dst, src);
printf("my_strcpy: %s\n",dst);//结果为 1234
system("pause");
return 0;
}
strcat 字符串追加(拼接)
char* my_strcat(char* dst, const char* src)
{
assert(dst);
assert(src);
char* ret = dst;
while (*dst != '\0')//先将dst加到'\0',
{
dst++;
}
while (*dst++ = *src++)//开始拼接
{
;
}
return ret;
}
int main()
{
char dst[] = "abcdef";
char *src = "1234";
my_strcat(dst, src);
printf("my_strcat: %s\n",dst);//结果为 abcdef1234
system("pause");
return 0;
}
strcmp字符串比较
int my_strcmp(const char* dst, const char* src)
{
assert(dst);
assert(src);
int ret = 0;
while (*dst == *src && *dst!='\0' && src!='\0')
{
dst++, src++;
}
ret = *dst - *src;
if (ret > 0)
{
return 1;
}
else if (ret < 0)
{
return -1;
}
return 0;
}
int main()
{
char *dst = "abcdef";
char *src = "abcd";
int ret = my_strcmp(dst, src);
printf("my_strcmp ret is: %d\n",ret);//结果为1
system("pause");
return 0;
}
strstr 在中查找另一个字符串
const char *my_strstr(const char *dst, const char *src)
{
assert(dst);
assert(src);
if (*src == '\0')//如果为'\0',则说明没有字符,返回NULL
{
return NULL;
}
const char *p1 = dst;//指向开始
const char *p2 = src;
char *q = NULL;//
while (*p1 != '\0')//从哪里开始
{
q = p1;//每次都更新
p2 = src;//每次都从最开始匹配
//查找子串
while (*p2 && *p1 == *p2 && *p1)
{
p1++;
p2++;
}
if (*p2 == '\0')//到这说明p2与p1匹配完了,即比较完了
{
return q;
}
//没有找到,继续++看下一个是否可以匹配
p1++;
}
return NULL;//没有找到返回NULL
}
//测试
int main()
{
//用指针定义一个变量str,在栈上指向字符常量区的字符串,不能直接被修改,所以加const较好,可以提前发现错误
const char *str = "abcdef";
const char *sub_str = "cd";
printf("%s\n", my_strstr(str, sub_str));
system("pause");
return 0;
}