编写mystrlen,mystrstr,mystrcpy三个函数,分别实现strlen,strstr,strcpy 的功能
#include <stdio.h>
// https://www.runoob.com/cprogramming/c-function-strlen.html
// 计算字符串的长度
int mystrlen(const char * str){
int i=0;
// 遍历字符串每一个字符,直到结尾的空字符
while(str[i]!='\0'){
i++; // 如果当前不是空字符,则字符长度+1
}
//返回长度
return i;
}
// https://www.runoob.com/cprogramming/c-function-strstr.html
// 寻找字符串needle在字符串haystack 中第一次出现的位置
char * mystrstr(const char * haystack,const char * needle){
int i=0,j=0; // 都从第一个字符开始判断
char * first=NULL; // 记录第一次出现的字符位置 的字符指针变量
// 遍历 haystack字符串每一个字符
while(haystack[i]!='\0'){
// 在haystack字符串中找到第一个和字符串needle第一个相同的字符,直到字符串结尾
while(needle[j]!='\0'&&haystack[i]!='\0'&&needle[j]!=haystack[i]){
i++;
}
// 如果在字符串结尾前,找到相同字符
if(needle[j]!='\0'&&haystack[i]!='\0'&&needle[j]==haystack[i]){
// https://blog.csdn.net/cnmjjb/article/details/114659538
first = (char *)haystack+i; // 记录相同的第一个字符的位置
// 在haystack字符串中 匹配 needl字符串
while(needle[j]!='\0'&&haystack[i]!='\0'&&needle[j]==haystack[i]){
i++;
j++;
}
// 如果完全匹配子串needl,则返回第一次出现的位置
if(j==mystrlen(needle)){
return first;
}else{ // 如果没有完全匹配子串,则子串needle从第一个字符重新开始
j=0;
}
}
// char str[]= "Hello World Wo!";
// char target[]="Wo";
}
// 如果没有找到子串,则返回NULL
return NULL;
}
// https://www.runoob.com/cprogramming/c-function-strcpy.html
char * mystrcpy(char *dest,const char * src){
int i=0;
while(src[i]!='\0'){
dest[i]=src[i];
i++;
}
dest[i]='\0';
return dest;
}
int main(void){
char str[]= "Hello World Wo!";
char target[]="Wo";
char temp[20];
// 测试三个自定义函数
printf("str=%s, 长度为:%d\n",str,mystrlen(str));
mystrcpy(temp,str);
printf("str=%s, 复制到temp数组后,temp=%s\n",str,temp);
printf("str=%s, target=%s, target在str第一次出现的位置为:%s\n",str,target,mystrstr(str,target));
return 0;
}
这里我写了几篇博客有详细介绍:
https://primary-cattle.blog.csdn.net/article/details/129646587
https://primary-cattle.blog.csdn.net/article/details/129646587