C语言 字符串函数和内存函数大集合

目录

一.strlen

1.strlen的函数声明

2.strlen函数的头文件

3.strlen函数的使用

4.my_strlen函数的实现

二.strcpy

1.strcpy函数的函数声明

2.strcpy函数的头文件

3.strcpy函数的使用

4.my_strcpy函数的实现

三.strcat

1.strcat函数的函数声明

2.strcat函数的头文件

3.strcat函数的使用

4.my_strcat函数的实现

四.strstr

1.strstr函数的函数声明

2.strstr函数的头文件

3.strstr函数的使用

4.my_strstr函数的实现

五.memcpy

1.memcpy函数的函数声明

2.memcpy函数的头文件

3.memcpy函数的使用

4.my_memcpy函数的实现

六.memmove

1.memmove函数的函数声明

2.memmove函数的头文件

3.memmove函数的使用

4.my_memmove函数的实现


一.strlen

1.strlen的函数声明

size_t strlen(const char *str);

2.strlen函数的头文件

#include <string.h>

3.strlen函数的使用

strlen函数时测量字符串长度的函数(不包括'\0')

#include <stdio.h>
#include <string.h>
int main()
{
    char arr[] = "abcdef";
    int len = strlen(arr);
    printf("%d\n", len);
    return 0;
}

4.my_strlen函数的实现

strlen是计算一个字符串的长度,也就是字符数量,那么我们自己实现的my_strlen也遵循库函数的功能即可。

#include <stdio.h>
#include <assert.h>
int my_strlen(const char* str)
{
    int count = 0;
    assert(*str != NULL);//判断传进来的指针是否有效
    while (*str++)//当*str = '\0'的时候条件为假
    {             //   '\0'的ASCLL码值为0
        count++;
    }
    return count;
}
int main()
{
    char arr[] = "abcdef";
    int len = my_strlen(arr);
    printf("%d\n", len);
    return 0;
}

二.strcpy

1.strcpy函数的函数声明

char *strcpy( char *to, const char *from );

2.strcpy函数的头文件

#include <string.h>

3.strcpy函数的使用

strcpy函数是将一个字符串的全部内容(包括'\0')拷贝到另一个字符串里。

#include <stdio.h>
#include <string.h>
int main()
{
	char arr1[] = "abcdefghi";
	char arr2[] = "bit";
	strcpy(arr1, arr2);//字符串拷贝
	printf("%s\n", arr1);
	printf("%s\n", arr2);
    return 0;
}

4.my_strcpy函数的实现

strcpy函数是字符串拷贝,传入的第一个字符串是接收拷贝的字符串,第二个字符串是要被拷贝的字符串,我们不需要保护第一个字符串,但是我们不希望第二个字符串被修改,所以在第二个传参的时候加上const。

assert是断言,判断传入的字符串是否合法(是否不为空指针),如果是空指针则进行报错

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <assert.h>
char* my_strcpy(char* dest, const char* str)
{
	assert(*dest != NULL);
	assert(*str != NULL);
	char* ret = dest;
	//拷贝str指向的字符串到dest指向的空间,包含'\0'
	while (*dest++ = *str++)
	{
		;
	}
	//返回目的空间的起始地址
	return ret;
}
int main()
{
	char arr1[] = "abcdefghi";
	char arr2[] = "bit";
	my_strcpy(arr1, arr2);
	printf("%s\n", arr1);
	printf("%s\n", arr2);
	return 0;
}

三.strcat

1.strcat函数的函数声明

char *strcat(char *_Destination,const char *_Source);

2.strcat函数的头文件

#include <string.h>

3.strcat函数的使用

strcat函数是字符串追加函数,也就是在英国字符串后面追加另一个字符串。

比如在“hello”后面追加一段“world”就可以用strcat函数来实现

#include <stdio.h>
#include <string.h>
int main()
{
	char arr1[30] = "hello";
	char arr2[] = "world";
	strcat(arr1, arr2);
	printf("%s\n", arr1);//追加字符串
    return 0;
}

结果打印出来就是 helloworld

4.my_strcat函数的实现

之前我们提到了,strcat函数是字符串追加函数,我们在自己实现的时候就需要提前找到被追加的字符串的尾部,也就是找到'\0'。

那么被追加的字符串是可以被改动的,而追加过去的字符串我们就不希望被修改,所以传进去的第一个字符串不需要加const,而第二个字符串需要加const

(assert是断言,判断传进去的字符串是否合法)。

#define _CRT_SECURE_NO_WARNINGS

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

char* my_strcat(char* dest, const char* str)
{
	char* ret = dest;
	assert(*dest != NULL);
	assert(*str);
	//找到目的字符串里的'\0'
	while (*dest != '\0')
	{
		dest++;
	}
	//追加
	while (*dest++ = *str++)
	{
		;
	}
	return ret;
}
int main()
{
	char arr1[30] = "hello";
	char arr2[] = "world";
	my_strcat(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}

四.strstr

1.strstr函数的函数声明

extern char *strstr(char *str1, const char *str2);

2.strstr函数的头文件

#include <string.h>

3.strstr函数的使用

第一个参数是被查找的字符串,第二个参数是需要在字符串里查找到的字符串,也就是说strstr函数的作用就是:在一个字符串里查找是否存在另一个字符串 ,如果存在则返回找到该字符串的起始地址,如果不存在则返回空(NULL)。

int main()
{
	char p1[] = "abbbcdef";
	char p2[] = "bbc";
	char* ret = strstr(p1, p2);
	printf("%s\n", ret);
	return 0;
}

4.my_strstr函数的实现

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <assert.h>

char* my_strstr(const char* p1, const char* p2)
{
	assert(p1 != NULL);
	assert(p2 != NULL);
	char* s1;
	char* s2;
	char* cur = (char*)p1;
	if (*p2 == '\0')
		return (char*)p1;
	while (*p1)
	{
		s1 = cur;
		s2 = (char*)p2;
		while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
		{
			return cur;
		}
		cur++;
	}
	return NULL;
}
int main()
{
	char p1[] = "abbbcdef";
	char p2[] = "bbc";
	char* len = my_strstr(p1, p2);
	printf("%s\n", len);
	return 0;
}

五.memcpy

1.memcpy函数的函数声明

void *memcpy(void *str1, const void *str2, size_t n);

2.memcpy函数的头文件

#include <string.h>

3.memcpy函数的使用

该函数是将一块内存里的数据复制到另一块内存里去。

int main()
{
	int i;
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int arr1[20] = { 0 };
	memcpy(arr, arr1, 40);
	for (i = 0; i < 10; i++)
	{
		printf("%d\n", arr1[i]);
	}
	return 0;
}

输出的结果是1 2 3 4 5 6 7 8 9 10.

4.my_memcpy函数的实现

#include <stdio.h>
#include <assert.h>
void* my_memcpy(void* dest, const void* src, size_t count)
{
	assert(dest && src);
	void* p = dest;
	while (count--)
	{
		*(char*)src = *(char*)dest;
		dest = (char*)dest + 1;
		src = (char*)src + 1;
	}
	return  p;
}
int main()
{
	int i;
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int arr1[20] = { 0 };
	my_memcpy(arr, arr1, 40);
	for (i = 0; i < 10; i++)
	{
		printf("%d\n", arr1[i]);
	}
	return 0;
}

六.memmove

1.memmove函数的函数声明

void * memmove(void * destination, const void * source, size_t num);

2.memmove函数的头文件

#include <string.h>

3.memmove函数的使用

该函数是将同一块内存的一些数据复制到这块内存的其他位置上。

int main()
{
	int i;
	int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
	memmove(arr1+2, arr1, 20);
	for (i = 0; i < 10; i++)
	{
		printf("%d\n", arr1[i]);
	}
	return 0;
}

打印出来的结果是1 2 1 2 3 4 5 8 9 10。

4.my_memmove函数的实现

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

void* my_memmove(void* dest, const void* src, size_t count)
{
	assert(dest && src);
	void* p = dest;
	if (dest < src)
	{
		while (count--)
		{
			*(char*)dest = *(char*)src;
			dest = (char*)dest + 1;
			src = (char*)src + 1;
		}
	}
	else
	{
		while (count--)
		{
			*((char*)dest + count) = *((char*)src + count);
		}
	}
	return p;
}
int main()
{
	int i;
	int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
	my_memmove(arr1+2, arr1, 20);
	for (i = 0; i < 10; i++)
	{
		printf("%d\n", arr1[i]);
	}
	return 0;
}

以上就是C语言里常用的字符串函数和内存函数的内容。

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追梦不止~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值