Explicación a nivel de niñera C / C ++ de las funciones de la biblioteca del lenguaje C --- funciones de cadena + implementación

 Página principal

Todavía hay incógnitas esperando ser exploradas_Estructura de datos, dificultades del lenguaje C, proyectos pequeños-Blog de CSDN

Columna de tema---Dificultades del lenguaje C

Dificultades del lenguaje C_Todavía hay blogs desconocidos esperando ser explorados-Blog CSDN

¡gracias por su apoyo! ! !

Tabla de contenido

I. Introducción

2. Explicación

1. Encuentre la función de longitud de la cadena (strlen)

1) Uso: 

2) Puntos a tener en cuenta:

 2. La longitud de la función de copia de cadena (stracpy) no está limitada

1) Uso: 

2) Puntos a tener en cuenta:

 3. La longitud de la función de agregar cadena (strcat) no está limitada 

1) Uso: 

2) Puntos a tener en cuenta:

4. La longitud de la función de comparación de cadenas (stracmp) no está limitada

1) Uso: 

2) Puntos a tener en cuenta:

5. La longitud de la función de cadena (strstr) no está limitada

1) Uso: 

2) Puntos a tener en cuenta:

3. Implementación individual 

 1. Implementación de función para encontrar la longitud de una cadena (strcpy)

1. Bucle

2. recursividad 

3. Aritmética de punteros 

 2. Otros puedes implementarlos tú mismo


I. Introducción

En el uso diario, las operaciones sobre cadenas son relativamente frecuentes, como calcular la longitud de las cadenas, copiar cadenas, etc. Aunque implementar estas funciones no es muy engorroso, si podemos llamar directamente a algunas funciones de la biblioteca, será relativamente simple en términos de tamaño del código. Bien, sin más, vayamos directo a la explicación.

2. Explicación

Nota: El archivo de encabezado de la siguiente función de biblioteca es string.h

1. Encuentre la función de longitud de la cadena (strlen)

1) Uso: 

El parámetro es un puntero a la cadena solicitada.

2) Puntos a tener en cuenta:

La condición de terminación de strlen es: encontrar '\0' (excluyendo '\0');

Su tipo de valor de retorno es un entero sin signo (entero sin signo; el entero sin signo siempre es >= 0);

#include<stdio.h>
#include<string.h>
int main()
{
	char str1[] = "strstr";
	char str2[] = "str\0str";
	printf("str1:%d\n",strlen(str1));
    printf("str2:%d\n",strlen(str2));
	return 0;
}

 2. La longitud de la función de copia de cadena (stracpy) no está limitada

1) Uso: 

el destino es la matriz a la que se va a copiar y el origen es la matriz que se va a copiar.

2) Puntos a tener en cuenta:

El espacio de destino char* debe ser lo suficientemente grande y debe ser modificable. De manera similar, finaliza cuando encuentra '\0'

#include<stdio.h>
#include<string.h>
int main()
{
	char str1[7];//destination
	char str2[] = "str\0str";//source
	strcpy(str1, str2);
	printf("str1:%s\n",str1);
	printf("str2:%s\n",str2);
	return 0;
}

 3. La longitud de la función de agregar cadena (strcat) no está limitada 

1) Uso: 

 Agregue la cadena de origen al destino.

2) Puntos a tener en cuenta:

Tenga en cuenta que el tamaño del espacio del destino debe ser suficiente.

#include<stdio.h>
#include<string.h>
int main()
{
	char str1[7]="str";
	char str2[] = "str\0str";
	strcat(str1, str2);
	printf("str1:%s\n", str1);
	printf("str2:%s\n", str2);
	return 0;
}

4. La longitud de la función de comparación de cadenas (stracmp) no está limitada

1) Uso: 

Compara str1 y str2.

2) Puntos a tener en cuenta:

Lo que compara strcmp no es la longitud de la cadena, sino su valor en código ASCII. (Compare los valores del código ASCII del primer carácter de str1 y el primer carácter de str2. Si es menor que, devuelve <0; si es mayor, devuelve >0; si es igual, compara el siguiente carácter y luego como arriba )

#include<stdio.h>
#include<string.h>
int main()
{
    //判断str1和str2的大小关系,并打印大小关系符
	char str1[7] = "str";
	char str2[] = "str\0str";
	int ret = strcmp(str1, str2);
	if (ret > 0)
		printf(">");
	else if (ret < 0)
		printf("<");
	else
		printf("=");
	
	return 0;
}

5. La longitud de la función de cadena (strstr) no está limitada

1) Uso: 

 Busque si str1 contiene la cadena str2 y busque la dirección de la cadena devuelta en str1.

2) Puntos a tener en cuenta:

Antes de usar o procesar el valor de retorno de strstr(str1,str2), recuerde no cambiar la cadena str1. Si desea cambiarla, debe esperar hasta que se use el valor de retorno.

#include<stdio.h>
#include<string.h>
int main()
{
	char str1[7] = "strcmp";
	char str2[] = "str";
	char*ret = strstr(str1, str2);
	if (ret == NULL)
		printf("未找到\n");
	else
	{
		printf("%s", ret);
	}
	return 0;
}

3. Implementación individual 

 1. Implementación de función para encontrar la longitud de una cadena (strcpy)

 La implementación de esta función es relativamente simple y se puede implementar de muchas maneras.

1. Bucle

#include<stdio.h>
int my_strlen2(char* arr)
{
	int i = 0;
	while (*(arr + i) != '\0')//如果遇到'\0'结束,'\0'不算作字符串长度
		i++;
	return i;
}
int main()
{
	char arr[] = "abcdef";
	int ret2 = my_strlen2(arr);
	printf("迭代:%d\n", ret2);
	return 0;
}

2. recursividad 

#include<stdio.h>
int my_strlen1(char* arr)
{
	if (*arr != '\0')
		return 1 + my_strlen1(arr + 1);
	else
		return 0;
}
int main()
{
	char arr[] = "abcdef";
	int ret1 = my_strlen1(arr);
	printf("%d\n", ret1);//递归:
	return 0;
}

3. Aritmética de punteros 

La resta de dos punteros es igual al número de múltiplos de bytes de tipo puntero entre las dos direcciones en la memoria. Debido a que ambos punteros apuntan a matrices de caracteres, las matrices son continuas, por lo que pueden representar cuántos elementos hay.

#include<stdio.h>
char* my_strlen(char* arr)
{
	char*p=arr;
	while(*p!='\0')
		p++;
	return p;
}
int main()
{
	char arr[] = "abcdef";
	char* ret = my_strlen(arr);
	printf("%d\n", ret-arr);
	return 0;
}

 2. Otros puedes implementarlos tú mismo

 Consejo: además de la solución violenta de strstr, también puedes utilizar el algoritmo KMP y estudiarlo tú mismo.

Supongo que te gusta

Origin blog.csdn.net/qq_73435980/article/details/133419392
Recomendado
Clasificación