Implementación de simulación de funciones en lenguaje C

contenido

1. Simular la implementación de strncat

1.1 Escritura de código 

1.2 Los resultados son los siguientes

2. Simular strncpy

2.1 Escritura de código

2.2 Los resultados son los siguientes

3. Encuentra un solo perro

3.1 Escritura de código

3.2 Los resultados son los siguientes


 

1. Simular la implementación de strncat


Entre las funciones de la biblioteca del sistema, se encuentra la función strncat, que se utiliza para agregar cadenas, es decir, agregar una cadena después de una cadena, su prototipo de función es:

char *strncat(char *strDest,const *strSource,size_t count);

*strDest es la cadena de destino *strSource es la cadena de origen, count es el número de cadenas que se agregarán.

1.1 Escritura de código 

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
typedef unsigned int uint;
char *my_strncat(char *dest, const char *src, uint count)//模拟实现strncat函数
{
 assert(dest);
 assert(src);
 int *ret = dest;
 while (*dest)
 {
  dest++; //找到dest中的\0
 }
 while (count--)
 {
  *dest++ = *src++;
 }
 *dest = '\0';
 return ret;
}
//程序测试
int main()
{
 char arr[20] = "abcdef";
 int len = strlen(arr);
 my_strncat(arr, arr, len);
 printf("%s\n", arr);
 system("pause");
 return 0;
}

1.2 Los resultados son los siguientes

 


 

2. Simular strncpy

char *strncpy(char *strDest,const *strSource,size_t count);

*strDest es la cadena de destino *strSource es la cadena de origen, count es el número de caracteres que deben copiarse de la cadena de origen a la cadena de destino. 

Nota: Si la longitud de la cadena de origen es menor que el conteo, agregue 0 a la cadena de destino después de copiar la cadena de origen, hasta que el conteo sea

2.1 Escritura de código

char * My_strncpy(char * dest, const char *src, size_t n)
{
    assert(dest);
    assert(src);

    char *ret = dest;
    while (n--)
    {
        *dest++ = *src++;
    }
    return ret;
}
int main()
{
    char str1[20] = "123456789";
    char str2[20] = "abcde";
    printf("%s", My_strncpy(str1, str2, 3));

}

2.2 Los resultados son los siguientes

3. Encuentra un solo perro

Solo dos números en una matriz aparecen una vez, todos los demás números aparecen dos veces.

Escribe una función para encontrar estos dos números que ocurren solo una vez.

3.1 Escritura de código

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<assert.h>
void find_two_diff_num(int arr[], int sz, int *p1, int *p2)
{
	int i = 0;//循环变量
	int ret = 0;
	int pos = 0;
	*p1 = 0;//数字1的地址
	*p2 = 0;//数字2 的地址
	//1.把所有数字异或 
	for (i = 0; i < sz; i++)
	{
		ret ^= arr[i];//循环到最后一次的结果是5^6,即就是101^110=011
	}
	//2.找ret二进制中为1的一位
	for (i = 0; i < 32; i++)
	{
		if (((ret >> i) & 1) == 1)//上一步两个数异或的后两位为1
		{
			pos = i;
			break;
		}
	}
	//分组
	for (i = 0; i < sz; i++)
	{
		if (((arr[i] >> pos) & 1) == 1)
		{
			(*p1) ^= arr[i];
		}
	}
	(*p2) = (*p1) ^ ret;
}


int main()
{
	int arr[] = { 1, 2, 5, 6, 8, 1, 6, 2, 9, 8 };
	int sz = sizeof(arr) / sizeof(arr[0]);//数组大小
	int num1 = 0;//数字1
	int num2 = 0;//数字2
	find_two_diff_num(arr, sz, &num1, &num2);
	printf("num1=%d,num2=%d\n", num1, num2);
	system("pause");
	return 0;
}

3.2 Los resultados son los siguientes

 

Supongo que te gusta

Origin blog.csdn.net/weixin_53939785/article/details/124062080
Recomendado
Clasificación