模拟实现strlen/strcpy/strcat/strcmp/strstr/strchr/函数

时间:2022-10-17 17:01:42
一.strlen
函数作用:检测符串长度,不包括\0在内.
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
int main()
{
int my_strlen( const char *src);
char *src = "hello,world....";
printf("%d", my_strlen(src));
system("pause");
return 0;
}
int my_strlen( const char *src)
{
int count = 0;
assert(src != NULL);
while (*src != '\0')
{
src++;
count++;
}
return count;
}
二.strcpy
函数作用:实现字符串的复制
#include<stdio.h>//把一个数组拷贝到另外一个数组后面
#include<stdlib.h>
#include<assert.h>
#include<string.h>
int main()
{
char* my_strcpy(char *dest, const char *src);
char arr[40];//初始化第一个元素
char *src = "nihao,woshilishuai";
char *dest = arr;
printf("%s\n", my_strcpy(dest, src));
system("pause");
return 0;
}
char* my_strcpy(char *dest, const char *src)
{
assert(dest != NULL);//断言,如果他们为空指针则报错
assert(src != NULL);
char *a = dest;
while ((*dest++ = *src++) != '\0');
return a;
}
三.strcat
函数作用:把第二个字符串添加到第一个字符串的结尾处(覆盖第一串的\0),并将自己的\0也复制过去.
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
int main()
{
char* my_strcat(char *dest,const char *src);
char arr[40] = "ni,hao!!";
char *dest = arr;
char *src = "wojiaolishuai ";
printf("%d\n", sizeof(my_strcat(dest, src)));//
system("pause");
return 0;
}
char* my_strcat(char *dest, char *src)
{
assert(dest != NULL);
assert(src != NULL);
char *ret = dest;//ret里面存的是arr的地址
while (*dest != '\0')
{
dest++;
}
while ((*dest++ = *src++) != '\0');
return ret;//返回数组首元素的地址
}
四.strcmp
函数作用:比较两个字符串的大小微笑
从左向右逐个字符比较,如果返回1则第一个大。返回0两个相等,返回-1第二个大。
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>//比较两个字符串的大小
int my_strcmp(char *dest, char *src);
int main()
{
char *dest = "abcdef";
char *src = "abcdefg";
printf("%d", my_strcmp(dest, src));
system("pause");
return 0;
}
int my_strcmp(const char *dest, const char *src)
{
assert(dest != NULL);
assert(src != NULL);
int ret = 0;
while ((*dest != '\0') || (*src != '\0'));//两个都不满足才停止循环
{
if (*dest > *src)
{
ret = 1;
return ret;
}
if (*dest < *src)
{
ret = -1;
return ret;
}
dest++;
src++;
}
return ret;
}
五.strstr
函数作用:判断第二个字符串是不是第一个字符串的子集如果是,返回第二个函数在第一个函数中首次出现的地址,否则返回NULL;
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
char* my_strstr(const char *dest, const char *src);
int main()
{
char *dest = "hello,";

char *src = "lo";
printf("%s", my_strstr(dest, src));
system("pause");
return 0;
}
char* my_strstr(const char *dest,const char *src)
{
assert(dest != NULL);
assert(src != NULL);
char *arr1;
char *arr2;
while (*dest != '\0')
{
arr1 = dest;
arr2 = src;
while (*arr1++ == *arr2++)
{
if (*arr2 == '\0')
{
return dest;
}
}
dest++;
}
return NULL;
}
六.strchr
函数作用:查找字符串中首次出现字符c(可以是任意字符)的位置,如果第一个字符串中有字符c,则返回第一次出现字符c的位置
否则返回NULL
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
char* my_strchr(const char *dest, const char *src);
int main()

char *dest = "abcdef";
char src ='f';
printf("%s", my_strchr(dest, src));
system("pause");
return 0;
}
char* my_strchr(const char *dest,const char src)
{
assert(dest != NULL);
while((*dest++ != src)&&*dest != '\0')
{
if (*dest == src)
return dest;
}
return NULL;
}

如果大家发现有什么问题,欢迎指出来,我一定积极改正!谢谢!微笑