自己实现(strlen,strcpy,strncpy,strcmp,strncmp,strcat,strncat)

废话不多说,直接上代码,能看懂看,看不懂别看了,学习这种事,随缘就好

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

猜你喜欢

转载自blog.csdn.net/manonghouyiming/article/details/80056203
今日推荐