El lenguaje C implementa varias funciones de manipulación de caracteres

contenido

función strlen (para encontrar la longitud de una cadena)

método de contador

método recursivo

método puntero-puntero

función strcpy (copia de cadena)

Función strcat (cadena adjunta)

Función strcmp (comparación de cadenas)

función strstr (busca la primera aparición de una subcadena en una cadena larga)

función strncpy (copiar n caracteres)

función strncat (agregar n caracteres)


función strlen (para encontrar la longitud de una cadena)

método de contador

#include <stdio.h>
#include <assert.h>
int my_strlen(const char* str)
{
	assert(str);
	int count = 0;
	while (*str++)
	{
		count++;
	}
	return count;
}

método recursivo

#include <stdio.h>
#include <assert.h>
int my_strlen(const char* str)
{
	assert(str);
	if (*str)
	{
		return 1 + my_strlen(str + 1);
	}
	else
	{
		return 0;
	}
}

método puntero-puntero

#include <stdio.h>
#include <assert.h>

int my_strlen(const char* str)
{
	assert(str);
	char* tmp = str;
	while (*++tmp)
	{
		;
	}
	return tmp - str;
}

Nota: La resta de dos punteros es el número de elementos en el medio de los dos punteros.

función strcpy (copia de cadena)

#include <stdio.h>
#include <assert.h>
//strcpy函数返回的是目标空间的起始地址
//strcpy函数的返回类型的设置是为了实现链式访问
char* my_strcpy(char* dest, const char* str)
{
	assert(dest && str);
	char* ret = dest;
	//记录起始地址
	while (*dest++ = *str++)
	{
		;
	}
	return ret;
}

int main()
{
	char arr1[20] = { 0 };
	char arr2[] = "hello world";

	printf("%s\n", my_strcpy(arr1, arr2));
	return 0;
}

Función strcat (cadena adjunta)

#include <stdio.h>
#include <assert.h>

char* my_strcat(char* dest, const char* str)
{
	assert(dest && str);
	char* ret = dest;//记录起始地址
    //找目标字符串中的'\0'
	while (*dest)
	{
		dest++;
	}
	//拷贝
	while (*dest++ = *str++)
	{
		;
	}
	return ret;
}

int main()
{
	char arr1[20] = "hello ";
	char arr2[] = "world";

	printf("%s\n", my_strcat(arr1, arr2));
	return 0;
}

Función strcmp (comparación de cadenas)

#include <stdio.h>
#include <assert.h>

int my_strcmp(const char* dest, const char* str)
{
	assert(dest && str);
	while (*dest == *str)
	{
		if (*dest == '\0')
		{
			return 0;//相等
		}
		dest++;
		str++;
	}
	//不相等
	return *dest - *str;
}

int main()
{
	char arr1[] = "abcde";
	char arr2[] = "qhavs";
	int ret = my_strcmp(arr1, arr2);
	if (ret > 0)
	{
		printf(">\n");
	}
	else if (ret == 0)
	{
		printf("=\n");
	}
	else
	{
		printf("<\n");
	}
	return 0;
}

función strstr (busca la primera aparición de una subcadena en una cadena larga)

#include <stdio.h>
#include <assert.h>

char* my_strstr(const char* dest, const char* str)
{
	assert(dest && str);
	const char* s1 = dest;
	const char* s2 = str;

	const char* cur = dest;
	while (*cur)
	{
		s1 = cur;
		s2 = str;

		while (*s1 && *s2 && *s1 == *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
		{
			return (char*)cur;
		}
		cur++;
	}
	return NULL;
}

int main()
{
	char arr1[] = "abheabcdg";
	char arr2[] = "bcd";
	char* ret = my_strstr(arr1, arr2);

	printf("%s\n", ret);
	return 0;
}

función strncpy (copiar n caracteres)

#include <stdio.h>
#include <assert.h>

char* my_strncpy(char* dest, const char* str, int ret)
{
	assert(dest && str);
	char* tmp = dest;
	int i = 0;
	for (i = 0; i < ret; i++)
	{
		*dest++ = *str++;
	}
	return tmp;
}

int main()
{
	char arr1[10] = "helloxxxx";
	char arr2[7] = "world";
	printf("%s\n", my_strncpy(arr1, arr2, 5));
	return 0;
}

función strncat (agregar n caracteres)

#include <stdio.h>
#include <assert.h>

char* my_strncat(char* dest, const char* str, int n)
{
	assert(dest && str);
	char* ret = dest;//记录起始地址
	//找目标字符串中的'\0'
	while (*dest)
	{
		dest++;
	}
	//拷贝
	int i = 0;
	for (i = 0; i < n; i++)
	{
		*dest++ = *str++;
	}
	//字符串追加最后要多加一个'\0'
	*dest = '\0';
	return ret;
}
int main()
{
	char arr1[20] = "hello\0xxxxxxxx";
	char arr2[7] = "world";
	printf("%s\n", my_strncat(arr1, arr2, 5));
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/qq_54880517/article/details/123619478
Recomendado
Clasificación