您的位置:首页 > 其它

模拟实现strcpy,strcmp,strcat,strstr.strlen

2017-08-06 20:55 381 查看

strcpy函数实现

strcpy :字符串拷贝函数,  函数原型 char* strcpy(char* dest,char* src)    从stc的起始地址开始,到'\0'结束。 所以dest必须有足够的空间来容纳src。头文件#include<string.h>

char* my_strcpy(char* dest, const char* src)
{
assert(dest);
assert(src);
char* ret = dest;
while ((*dest++) = (*src++))
{
;
}
return ret;
}
测试部分
int main()
{
char arr[20];
char* str= "hello ";
char* ret = my_strcpy(arr, str);
printf("%s\n", ret);
system("pause");
return 0;
}


strcat函数实现

strcat :字符串连接函数 ,把src指向的字符串添加到dest后,(src直接覆盖dest结尾处的‘\0’)  原型  char* strcat(char *dest,const char* src);  头文件#include<string>
 注意事项: dest和src俩块空间不能有重叠部分,dest必须有足够大的空间来容纳srt,返回dest的指针

char* my_strcat(char* dest, const char* src)
{
char* ret = dest;
assert(dest);
assert(src);
while (*dest)
{
*dest++;
}
while (*dest++ = *src++)
{
;
}
return ret;
}


测试部分

int main()
{
char arr1[20] = "hello";
char arr2[] = "sust";
char* ret = my_strcat(arr1, arr2);
printf("%s\n", ret);
system("pause");
return 0;
}
arr1 的空间一定要足够大

strcmp函数实现

strcmp:字符串比较函数,俩个字符串自左向右逐个字符比较(按ASCIIZ值的大小比较)直到出现不同的字符或者‘\0’。若这俩个字符串为str1,str2,
            若str1==str2,返回0;
            若str1>str2 ,返回正数;
            若str1<str2,返回负数;
                 
int my_strcmp(const char* dest,const char* src)
{
int ret = 0;
while (*dest == *src)
{
if (*dest == '\0')
{
return 0;
}
*dest++;
*src++;
}
return *dest - *src;
}


测试 

int main()
{
char arr1[10] = "sust";
char arr2[10] = "sust";
int ret = my_strcmp(arr1, arr2);
printf("%d\n", ret);
system("pause");
return 0;
}

strstr函数实现

 strstr:在字符串中找子串   char* strstr(char* str1,char * str2)  在str1中找str2,如果找到了返回strp2在str1中首次出现的地址,如果没找到返回NULL。
char* my_strstr(const char* str1, const char* str2)
{
char *cp = (char*)str1;
char *substr = (char*)str2;
char *s1 = str1;
assert(str1);
assert(str2);
if (*str2 == '\0')
return NULL;
while (*cp)
{
s1 = cp;
substr = str2;
while (*s1&&*substr && (*s1 == *substr))
{
s1++;
substr++;
}
if (*substr == '\0')
return cp;
cp++;
}
}

strlen函数实现

strlen:求字符串长度函数,从开始直到遇到'\0'结束,返回计数器的值不包含‘\0’;

法一:
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 main()
{
char arr[10] = "hello";
int ret = my_strlen(arr);
printf("%d\n", ret);
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: