赞
踩
目录
在使用以下函数时,都需要引用头文件:#include<string.h>
size_t strlen(const char* str)
三种方式:
- int my_strlen(const char * str)
- {
- int count = 0;
- while (*str)
- {
- count++;
- str++;
- }
- return count;
- }
- //不能创建临时变量计数器
- int my_strlen(const char * str)
- {
- if(*str == '\0')
- return 0;
- else
- return 1+my_strlen(str+1);
- }
- int my_strlen(char *s)
- {
- char *p = s;
- while (*p != '\0')
- p++;
- return p - s;
- }
char* my_strcpy(char* destination,const char* source);
- char* my_strcpy(char* dest, const char*source)
- {
- assert(dest != NULL&&source != NULL);//对指针进行断言
- char*str2 = dest;
- while (*source != '\0')
- *dest++ = *source++;
- *dest = '\0';
- return str2;
- }
char* strcat(char* destination,const char* source);
- char* my_strcat(char*dest, const char* source)
- {
- assert(*dest != NULL&&*source != NULL);//断言
- char *str = dest;
- while (*dest != '\0')//找到连接处位置
- dest++;
- while (*source != '\0')
- {
- *dest++ = *source++;
- }
- *dest = '\0';//以空字符结束字符串
- return dest;
- }
int strcmp(const char* str1,const char* str2);
(1)第一个字符串大于第二个字符串,则返回大于0的数字
(2)第一个字符串等于第二个字符串,则返回0
(3)第一个字符串小于第二个字符串,则返回小于0的数字
- int my_strcmp(const char* str1,const char* str2)
- {
- while (*str1 == *str2)
- {
- if (*str1 == '\0')//字符串比较进行到终止符,即字符串相等
- return 0;
- str1++;
- str2++;
- }
- if (*str1 > *str2)
- return 1;
- if (*str1 < *str2)
- return -1;
- }
char* strstr(const char* str1,const char* str2);
- char* my_strstr(const char* dest, const char* src)
- {
- char* p1 = (char*)dest;//在这里需要强制类型转换成char*
- char* p2 = (char*)src;
- char* cp = (char*)dest;//cp就是用来保存首地址的
- assert(dest != NULL&&src!=NULL);
- while (*cp)
- {
- p1 = cp;
- while (*p1 != '\0' && *p2 != '\0' && *p1 == *p2)
- {
- p1++;
- p2++;
- }
- if (*p2 == '\0')
- {
- return cp;
- }
- p2 = (char*)src;
- cp++;//cp++可以得到原起始位置的下一个位置
- }
- return NULL;
- }
void* memecpy(void* destination,const void* source,size_t num);
- void* my_memcpy(void* dest, const void* str, int num)
- {
- assert(dest!='\0'&&str!='\0');
- char* p1 = (char*)dest;//强制类型转换
- char* p2 = (char*)str;
- char* cp = (char*)dest;
- while (num--)
- {
- *p1++ = *p2++;//拷贝
- }
- return cp;
- }
void* mommove(void* destination,const void* source,size_t num);
- void* my_memmove(void* dest, const void* str, size_t count)
- {
- assert(dest != NULL&&str != NULL);
- char* p1 = (char*)dest;
- char* p2 = (char*)str;
- char* cp = (char*)dest;
- if (p1 > p2)//拷贝时可能出现空间重叠,因此需要逆向拷贝
- {
- while (count--)
- *(p1 + count) = *(p2 + count);
- }
- else if (p1 < p2)//此时正常拷贝即可
- {
- while (count--)
- *p1++ = *p2++;
- }
- return cp;
- }
如果对大家有帮助的话,点赞收藏一下呀,小心心送上。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。