Tres métodos para lograr strlen () - (lenguaje C)

La función strlen () se deriva de la función de biblioteca <string.h>, que
se utiliza para calcular la longitud de la
cadena , y la cadena debe terminar con '\ 0'.
Strlen () contará el número de caracteres antes el '\ 0'.

Según descripción de MSDN

size_t strlen(const char* string);
size_t==unsigned int;

Entero sin signo de retorno.
Ahora proporcione tres métodos para lograr strlen ()

Directorio de artículos de serie

1. Método de contador
2. Método de recursión
3. Método de resta de puntero



1. Método de contador

Estamos contando el número de caracteres, podemos establecer una variable, cada vez que se encuentra un carácter, el contador aumentará en uno.

int my_strlen(const char* arr)//计数器的方法
{
    
    
	assert(arr);
	int count = 0;
	while (*arr)//条件是*arr!='\0',但'\0'也是数字0,且条件是0为假,非0为真
	{
    
    
		count++;
		arr++;
	}
	return count;
}
int main(void)
{
    
    
	char arr[] = "abcdef";
	int len = my_strlen(arr);
	printf("len = %d\n", len);
	return 0;
}

Dos, método recursivo

La recursividad se puede calcular sin crear variables.
Mira el código primero

int my_strlen(const char* p)//递归法
{
    
    
	while (*p)
	{
    
    
		p++;
		my_strlen(p);
		return 1+my_strlen(p);//此时p已经是进入循环的p+1;
	}
	return 0;
	
}
int main(void)
{
    
    
	char arr[] = "abcde";
	int len = my_strlen(arr);
	printf("len = %d\n", len);
	return 0;
}

Pase el nombre de la matriz de arr y use p para recibirlo. La misma condición de juicio, ingrese al bucle, el puntero se mueve un byte a la derecha, obtenga la dirección del siguiente carácter, ingrese la función nuevamente y repita nuevamente

Por ejemplo,
tome la cadena como ab como ejemplo y
Inserte la descripción de la imagen aquí
finalmente elimine la referencia para obtener '\ 0' y devuelva 0. Luego, la función de nivel superior devuelve 1 + el valor de retorno de la función de nivel inferior (0), y luego vuelve a la función de nivel superior, y su valor de retorno es 1 + 1 + 0. Exactamente 2

Tres, método de puntero menos puntero

指针相减,得到的不是指针,而是两指针间的元素个数。


思路:我们找到首字符的指针,再找到‘\0'的指针,返回两指针相减的值。

Ver codigo

int my_strlen(const char* p)//指针相减法
{
    
    
	char* ret = p;
	while (*p)
	{
    
    
		p++;
	}
	return p - ret;

}
int main(void)
{
    
    
	char arr[] = "abcdef";
	int len = my_strlen(arr);
	printf("len = %d\n", len);
}

Debido a que p continuará moviéndose y la dirección apuntada por el puntero cambiará, primero asigne la primera dirección a otro puntero que no cambiará.
Inserte la descripción de la imagen aquí
Esta imagen es bastante obvia.

El código se puede ejecutar, el compilador utilizado es VS2019, recuerde agregar el archivo de encabezado al ejecutar

Supongo que te gusta

Origin blog.csdn.net/weixin_52199109/article/details/112796848
Recomendado
Clasificación