Simulación en lenguaje C para realizar la función de procesamiento de cadenas.

Se necesita un poco más de coraje para afrontar el deterioro del yo

Hola a todos, soy Ji Ning.

Este artículo le ofrece la implementación de simulación de las cinco funciones principales de procesamiento de cadenas.

Directorio de artículos

1. Implementación de simulación de la función strlen. 

2. Implementación de simulación de la función strcpy

3. Implementación de simulación de la función strcmp.

4. Implementación de simulación de la función strcat.

5. Implementación de simulación de la función strstr


1. Implementación de simulación de la función strlen. 

  La función de strlen es encontrar la longitud de la cuerda.

  El prototipo de función de strlen.

método normal

  Busque '\0' y pase la primera dirección de la cadena. Si el valor desreferenciado no es '\0', la posición del puntero se moverá hacia atrás y el recuento del contador aumentará en 1, sabiendo que el valor desreferenciado de la El puntero es '\0', el bucle se detiene y la función devuelve el valor del contador.

size_t my_strlen(char* str)
{
	size_t count = 0;
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}

int main()
{
	char str[1000] = "I have a my_strlen hanshu";
	size_t len = my_strlen(str);
	printf("%zu", len);
	return 0;
}

puntero menos puntero

  Después de pasar la dirección del primer elemento de la cadena, primero guárdelo con un puntero de carácter, luego mueva el puntero guardado, busque '\0' y, después de encontrar '\0', reste la dirección del primer elemento de la cadena. desde el puntero en esta posición.longitud de la cadena

  El valor obtenido restando el puntero del puntero es el número de elementos entre los dos punteros.

size_t my_strlen(char* str)
{
	char* str2 = str;
	while (*str2 != '\0')
		str2++;
	return str2 - str;
}
int main()
{
	char str[1000] = "I have a my_strlen hanshu";
	size_t len = my_strlen(str);
	printf("%zu", len);
	return 0;
}

recursividad

  El núcleo del método recursivo es hacer que las cosas grandes sean más pequeñas.

  Pero tenga en cuenta que la recursividad debe tener una condición y cada recursividad debe acercarse cada vez más a esta condición.

  Cuando el puntero pasado se desreferencia a '\0', significa que la recursividad finaliza; de lo contrario, el puntero se mueve hacia atrás y continúa la recursividad.

size_t my_strlen(char* str)
{
	if (*str == '\0')
		return 0;
	else
		return my_strlen(str + 1) + 1;
}
int main()
{
	char str[1000] = "I have a my_strlen hanshu";
	size_t len = my_strlen(str);
	printf("%zu", len);
	return 0;
}

2. Implementación de simulación de la función strcpy

  La función de la función strcpy es copiar la cadena.

  El prototipo de función de strcpy.

Precauciones:

  •   Para copiar una cadena, también se debe copiar '\0' 
  •   La cadena de destino debe ser variable, no una cadena constante
  •   La función devuelve la primera dirección de la cadena de destino, por lo que primero se debe guardar la primera dirección
#include<assert.h>
char* my_strcpy(char* str1, const char* str2)
{
	assert(str1 && str2);
	char* ret = str1;
	while (*str2 != '\0')
	{
		*str1 = *str2;
		str1++;
		str2++;
	}
	*str1 = *str2;
	return str1;
}
int main()
{
	char str1[100] = { "0" };
	char str2[100] = "my_strcpy hanshu";
	my_strcpy(str1, str2);
	return 0;
}

3. Implementación de simulación de la función strcmp.

  La función de la función strcmp es comparar cadenas.

  prototipo de función strcmp

 Precauciones:

  Cuando str1>str2 devuelve un número mayor que 0, cuando str1<str2 devuelve un número menor que 0, cuando str1=str2 devuelve 0, entonces cuando se implementa la simulación, cuando str1!=str2, puedes usar *str1-*str2 a Indica el valor de retorno

//实现strcmp函数
#incldue<stdio.h>
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
	assert(str1 && str2);
	while (*str1 && *str2)
	{
		if (*str2 == *str1)
		{
			str1++;
			str2++;
		}
		else
			return *str1 - *str2;
	}
	if (*str1 == *str2 && *str1 == '\0')
		return 0;
}
int main()
{
	char str1[100] = "abcdefg";
	char str2[100] = "abcdefr";
	if (my_strcmp(str1, str2) > 0)
		printf("str1>str2\n");
	else
		printf("str2>str1\n");
	return 0;
}

4. Implementación de simulación de la función strcat.

  La función de la función strcat es realizar la concatenación de cadenas.

  prototipo de función strcat

   Al implementar la función strcat, primero debe encontrar '\0' y luego copiar la cadena imitando la implementación de la función de copia de cadena, y también debe copiar '\0'

#include<stdio.h>
#include<assert.h>
char* my_strcat(char* str1, const char* str2)
{
	assert(str1&&str2);
	char* ret = str1;
	//先找str1的  \0
	while (*++str1)
		 ;
	//将str2拷贝过来
	while (*str2 != '\0')
	{
		*str1 = *str2;
		str1++;
		str2++;
	}
	*str1 = *str2;
	return ret;
}
int main()
{
	char arr1[100] = "jining ";
	char arr2[100] = "bu shi da yuan zhong";
	my_strcat(arr1, arr2);
	printf("%s", arr1);
	return 0;
}

5. Implementación de simulación de la función strstr

  La función de la función strstr es encontrar una subcadena en una cadena

  prototipo de función strstr

Para implementar la función strstr, necesita configurar dos bucles. El bucle externo controla la posición del puntero de la cadena de destino y juzga si hay un puntero desreferenciado que sea el mismo que el primer carácter de la subcadena. Si son los Lo mismo, luego use el bucle interno para juzgar si la subcadena es parte de la cadena de destino.

#include<string.h>
char* my_strstr(const char* str1, const char* str2)
{
	char* str3 = str1;
	int i = 0;
	for (i = 0; i < strlen(str1); i++)
	{
		int count = 1;
		if (*(str3 + i) == *str2)
		{
			int j = 0;
			for (j = 1; j < strlen(str2); j++)
			{
				if (*(str3 + i + j) == *(str2 + j) && *(str2 + j) != '\0')
					count++;
			}
			if (count == strlen(str2))
				return (str1 + i);
		}
	}
	return NULL;
}
int main()
{
	char str1[100] = "zyb is a big yuanzhong is zyb TT";
	char str2[100] = "ong";
	char* ret = my_strstr(str1, str2);
	printf("%s", ret);
	return 0;
}

inserte la descripción de la imagen aquí

  El blogger ha estado escribiendo durante mucho tiempo, si puedes darle al blogger un combo triple gratis para alentarlo, ¡entonces creo que estás realmente sexy con pantalones tailandeses! ! !

Supongo que te gusta

Origin blog.csdn.net/zyb___/article/details/131771667
Recomendado
Clasificación