1、自定义函数(my_strlen)实现strlen函数的功能
代码:
#include <stdio.h>
int my_strlen(const char *arr)
{
static int i = 0;
if (*(arr + i) == '\0')
{
return i;
}
else
{
i++;
my_strlen(arr);
}
}
int main(int argc, char const *argv[])
{
char arr[20] = "";
int num = 0;
printf("请输入一个字符串:");
gets(arr);
num = my_strlen(arr);
printf("该字符串的长度为:%d\n", num);
return 0;
}
结果:
2、自定义函数(my_strcpy)实现strcpy函数的功能
代码:
#include <stdio.h>
void my_strcpy(char *arr[], const char *brr[])
{
*arr=*brr;
}
int main(int argc, char const *argv[])
{
char arr[20] = "";
char brr[20] = "";
printf("请输入一个字符串:");
gets(brr);
my_strcpy(arr, brr);
printf("复制后数组的结果是:%s\n", arr);
return 0;
}
结果:
3、自定义函数(my_strcmp)实现strcmo函数的功能
代码:
#include <stdio.h>
int my_strcmp(char *str1, char *str2)
{
if (str1 != NULL && str2 != NULL)
{
while (*str1++ != '\0' && *str2++ != '\0')
{
if (*str1 > *str2)
return 1;
else if (*str1 < *str2)
return -1;
else
continue;
}
//如果两个都为空,直接返回0
if ((*str1 == '\0') && (*str2 == '\0'))
return 0;
//如果前一个为空后一个不为空,s1<s2,返回-1
else if ((*str1 == '\0') && (*str2 != '\0'))
return -1;
//前一个不为空后一个为空,s1>s2,返回1
else if ((*str1 != '\0') && (*str2 == '\0'))
return 1;
//只剩下s1=s2的情况
else
return 0;
}
}
int main(int argc, char const *argv[])
{
char arr[20] = "";
char brr[20] = "";
printf("请输入第一个字符串:");
scanf("%s", &arr);
printf("请输入第二个字符串:");
scanf("%s", &brr);
int n = 0;
n = my_strcmp(arr, brr);
switch (n)
{
case 1:
printf("1比2大\n");
break;
case 0:
printf("一样大\n");
break;
case -1:
printf("1比2小\n");
break;
default:
printf("error\n");
}
return 0;
}
结果:
4、自定义函数(my_strcat)实现strcat函数的功能
代码:
#include <stdio.h>
char *my_strcat(char *str1, const char *str2)
{
while (*str1 != '\0')
{
str1++;
}
while (*str2 != '\0')
{
*str1++ = *str2++;
}
*str1 = '\0';
}
int main(int argc, char const *argv[])
{
char arr[20] = "";
char brr[20] = "";
printf("请输入第一个字符串:");
scanf("%s", &arr);
printf("请输入第二个字符串:");
scanf("%s", &brr);
my_strcat(arr, brr);
printf("%s\n", arr);
return 0;
}
结果:
5、自定义函数(my strstr)实现求src字符串中是否包含子串dest字符串
代码:
#include <stdio.h>
char *my_strstr(const char *arr, const char *brr)
{
// 初始化三个字符指针
char *s1 = NULL;
char *s2 = NULL;
char *stu = (char *)arr;
// 如果brr为空字符串,则返回p1的首地址
if (*brr == '\0')
{
return (char *)arr;
}
// 遍历字符串arr
while (*stu)
{
// 将s1和s2分别指向stu和brr的当前字符,开始新一轮的比较
s1 = stu;
s2 = (char *)brr;
// 内部循环,逐个比较s1和s2指向的字符,如果相同则继续比较下一个字符
while (*s1 && *s2 && (*s1 == *s2))
{ // '\0'的ASCII码值是0,视为假
s1++;
s2++;
}
// 如果s2已经指向结束符'\0',则说明在stu开始的位置找到了子串brr,返回stu
if (*s2 == '\0')
{
return stu; // 找到子串p2
}
// 如果s1已经指向结束符'\0',说明当前stu所在子串长度不足以匹配brr,终止本次查找
if (*s1 == '\0')
{
return NULL;
}
// 移动stu指针,使其指向下一个可能的子串起始位置
*stu++;
}
// 遍历结束后仍未找到子串brr,则返回NULL
return NULL; // 没找到
}
int main(int argc, char const *argv[])
{
char arr[20] = "";
char brr[20] = "";
printf("请输入第一个字符串:");
scanf("%s", &arr);
printf("请输入第二个字符串:");
scanf("%s", &brr);
const char *ret = my_strstr(arr, brr);
// 根据返回值判断查找结果
if (ret == NULL)
{
printf("no\n");
}
else
{
printf("yes\n");
}
return 0;
}