Implement it yourself (strlen, strcpy, strncpy, strcmp, strncmp, strcat, strncat)

Don't talk nonsense, just go to the code directly, if you can understand it, don't read it if you don't understand it, learn this kind of thing, just follow the fate

#include<iostream>
#include<assert.h>
using namespace std;
size_t my_strlen(const char *str)
{
	assert(str != NULL);
	if(*str == '\0')
		return 0;
	else
		return my_strlen(str+1) + 1;
}

char* my_strcpy(char *strDest, const char *strSrc)
{
	char *start = strDest;           
    assert(strDest != NULL&&strDest != NULL);  
	char * ptmp_Dest = strDest;
	const char *ptmp_Src = strSrc;
    while (*ptmp_Src != '\0')   
    {  
        *ptmp_Dest++ = *ptmp_Src++;  
    }  
	* ptmp_Dest = '\ 0';
    return start;        
	
}
char *my_strncpy(char *dst, const char *src, size_t n)  
{  
    char *start = dst;         
    assert(dst != NULL&&src != NULL);        
    while (n--)                
    {  
        if (*src == '\0')      
        {  
            *dst = '\0';  
            dst++;  
        }  
        else  
        {  
            *dst = *src;  
            dst++;  
            (char*)src++;  
        }  
    }   
    return start;       
}  

//str1 > str2  : 1
//str1 == str2 : 0
//str1 < str2  : -1
int my_strcmp(const char *str1, const char *str2)
{
	assert(str1!=NULL && str2!=NULL);
	if(*str1=='\0' && *str2=='\0')
		return 0;
	while(*str1!='\0' && *str2!='\0')
	{
		if(*str1 > *str2)
			return 1;
		else if(*str1 < *str2)
			return -1;
		else
		{
			str1++;
			str2++;
		}
	}
	if(*str1=='\0' && *str2!='\0')
		return -1;
	else if(*str1!='\0' && *str2=='\0')
		return 1;
	return 0;
}
int my_strncmp(const char *str1, const char *str2, size_t n)  
{  
    assert(str1 != NULL&&str2 != NULL);  
    while (n && (*str1 == *str2))  
    {  
        (char*)str1++;  
        (char*)str2++;  
        n--;  
    }  
    if (n > 0)  
        return *str1 - *str2;  
    return *(str1-1) - *(str2-1);  
}  

char* my_strcat(char *strDest, const char *strSrc)
{					
	assert(strDest!=NULL && strSrc!=NULL);
	char * ptmp_Dest = strDest;
	const char *ptmp_Src = strSrc;
	while(*ptmp_Dest != '\0')
		++ ptmp_Dest;
	while(*ptmp_Src != '\0')
		*ptmp_Dest++ = *ptmp_Src++;
	* ptmp_Dest = '\ 0';
	return strDest;
}
char *my_strncat(char *dst, const char *src, size_t n)  
{  
    char *start = dst;  
    assert(dst != NULL&&src != NULL);   
    while (*dst)    
        dst++;   
    while (n--)    
        *dst++ = *(char*)src++;    
    return start;  
}  

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324737809&siteId=291194637
Recommended