编写mystrlen,mystrstr,mystrcpy三个函数,分别实现strlen,strstr,strcpy 的功能

编写mystrlen,mystrstr,mystrcpy三个函数,分别实现strlen,strstr,strcpy 的功能

三个函数可以使用循环来完成。

代码如下:

参考链接:


C 库函数 – strstr() | 菜鸟教程 C 库函数 - strstr() C 标准库 - <string.h> 描述 C 库函数 char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 '\0'。 声明 下面是 strstr() 函数的声明。 char *strstr(const.. https://www.runoob.com/cprogramming/c-function-strstr.html

C语言自己实现strstr函数功能_自主实现字符串函数strstr()的功能_中华神威的博客-CSDN博客 本人没参考任何strstr函数的标准源码,自己摸索了一天不断调试,不断修改按自己的逻辑才写出这个字符串查找函数的算法,查找字符串不像一般的字符串复制和连接,情况更复杂,每一种情况都要能查出来,差点就放弃了strstr函数的功能是字符串查找:代码:#include<stdio.h>#include<string.h>char* my_strstr(const char* str1, const char* str2){char* s1 = NULL; char* s https://blog.csdn.net/cnmjjb/article/details/114659538

C 库函数 – strcpy() | 菜鸟教程 C 库函数 - strcpy() C 标准库 - <string.h> 描述 C 库函数 char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest。 需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。 声明 下面是 strcpy() 函数的声明。 char *strcpy(char *de.. https://www.runoob.com/cprogramming/c-function-strcpy.html


#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;
    
    
}

img

这里我写了几篇博客有详细介绍:
https://primary-cattle.blog.csdn.net/article/details/129646587

https://primary-cattle.blog.csdn.net/article/details/129646587