Lenguaje C: implementación de simulación de algunas funciones de cadena

Este artículo es una implementación de simulación de algunas funciones de cadena. Para una comprensión profunda de las funciones de cadena, puede explorar el lenguaje C: funciones de caracteres y funciones de cadena_notas de estudio

Simular la implementación de strlen

size_t my_strlen(const char* ptr)
{
    
    
	assert(ptr);
	char* start = ptr;
	while (*ptr != '\0')
	{
    
    
		ptr++;
	}
	return (size_t)(ptr - start);
}

Simular la implementación de strcpy

char* my_strcpy(char* dest, const char* src)
{
    
    
	assert(dest && src);
	char* ptr = dest;
	while (*dest++ = *src++)
	{
    
    
		;
	}
	return ptr;
}

Simular la implementación de strcat

char* my_strcat(char* dest, const char* src)
{
    
    
	assert(dest && src);
	char* ptr = dest;
	while (*dest != '\0')
	{
    
    
		dest++;
	}
	while (*dest++ = *src++)
	{
    
    
		;
	}

	return ptr;
}

Simular la implementación de strcmp

int my_strcmp(const char* str1, const char* str2)
{
    
    
	assert(str1 && str2);
	while (*str1 == *str2)
	{
    
    
		if (*str1 == '\0')
		{
    
    
			return 0;
		}
		str1++;
		str2++;
	}
	return *str1 - *str2;
}

Simular la implementación de strstr

const char* my_strstr(const char* s1, const char* s2)
{
    
    
    assert(s1 && s2);
    char* cp = s1;
    char* p1 = NULL;
    char* p2 = NULL;
    if (*s2 == '\0')
    {
    
    
        return s1;
    }
    while (*cp)
    {
    
    
        p1 = cp;
        char* p2 = s2;

        while (*p1 == *p2 && *p1 && *p2)
        {
    
    
            p1++;
            p2++;
            
        }
        if (*p2 == '\0')
        {
    
    
            return cp;
        }
        cp++;

    }
    return NULL;
    
}

Simular la implementación de strncpy

char* my_strncpy(char* s1, const char* s2, size_t num)
{
    
    
	assert(s2);
	char* ret = s1;
	while (*s2 && num)
	{
    
    
		*s1 = *s2;
		num--;
		s1++;
		s2++;
	}
	return ret;
}

Simular la implementación de strncat

char* my_strncat( char* s1, const char* s2,size_t num)
{
    
    
	assert(s2);
	char* ret = s1;
	while (*s1)
	{
    
    
		s1++;
	}
	while (*s2 && num)
	{
    
    
		*s1 = *s2;
		s1++;
		s2++;
		num--;
	}
	return ret;
}

Simular la implementación de strncmp

int my_strncmp(const char *s1, const char *s2, size_t n) 
{
    
    
    while(n--) 
    {
    
    
        if(*s1 != *s2)
            return *s1 - *s2;
        else if(*s1 == '\0')
            return 0;
        s1++;
        s2++;
    }
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/yjagks/article/details/132795826
Recomendado
Clasificación