栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

关于c语言字符串函数和内存函数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于c语言字符串函数和内存函数

字符串函数:

strlen求字符串长度,strcpy字符串拷贝,strcat字符串追加,strcmp字符串比较,strstr字符串查找字串

内存函数

memcpy内存拷贝,memmove内存拷贝升级

1.strlen函数的模拟实现

int my_strlen(const char* str) {
	assert(str);				//断言,不能对空串解引用
	int ret = 0;
	while (*str != '') {
		ret++;
		str++;
	}
	return ret;
}

int main()
{
	char arr[] = "abcdef";
	printf("%dn", my_strlen(arr));
	return 0;
}

2.strcpy的模拟实现

char* my_strcpy(char* dest, const char* sou) {
	assert(dest && sou);
	char* ret = dest;
	while (*dest++ = *sou++)
		;
	return ret;
}

int main()
{
	char arr1[] = "abcdef";
	char arr2[20] = { 0 };
	my_strcpy(arr2, arr1);
	printf("%sn", arr2);
	return 0;
}

3.strcat函数模拟实现

char* my_strcat(char* dest, const char* sou) {
	assert(dest && sou);
	char* ret = dest;
	while (*dest != '') {
		dest++;
	}
	while (*dest++ = *sou++)
		;
	return ret;
}
int main()
{
	char arr1[20] = "hello ";
	char arr2[] = "world";
	my_strcat(arr1, arr2);
	printf("%sn", arr1);
	return 0;
}

4.strcmp函数的模拟实现

int my_strcmp(const char* str1, const char* str2) {
	assert(str1 && str2);
	while (*str1 == *str2) {
		if (*str1 == '') {
			return 0;
		}
		str1++;
		str2++;
	}
	return *str1 - *str2;
}
int main()
{
	char arr1[] = "abcd";
	char arr2[] = "abcd";
	int ret = my_strcmp(arr1, arr2);
	if (ret < 0) {
		printf("<");
	}
	else if (ret == 0) {
		printf("==");
	}
	else {
		printf(">");
	}

	return 0;
}

5.strstr函数的模拟实现

char* my_strstr(const char* str1, const char* str2) {
	assert(str1 && str2);
	const char* strs1 = str1;
	const char* strs2 = str2;
	const char* p = str1;
	while (*p) {
		strs1 = p;
		strs2 = str2;
		while (*strs1 == *strs2) {
			strs1++;
			strs2++;
		}
		if (*strs2 == '') {
			return p;
		}
		p++;
	}
	return NULL;
}
int main()
{
	char arr1[] = "woaixuexi";
	char arr2[] = "ai";
	printf("%sn", my_strstr(arr1, arr2));
	return 0;
}

6.memcpy函数的模拟实现

void* my_memcpy(void* dest, void* sou, int num) {
	assert(dest && sou);
	void* ret = dest;
	for (int i = 0; i < num; i++) {
		*(char*)dest = *(char*)sou;
		dest = (char*)dest + 1;
		sou = (char*)sou + 1;
	}
	return ret;
}
int main()
{
	int arr1[] = { 1,2,3,4 };
	int arr2[4] = { 0 };
	my_memcpy(arr2, arr1, 16);
	for (int i = 0; i < 4; i++) {
		printf("%d ", arr2[i]);
	}
	return 0;
}

7.memmove函数的模拟实现

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008472.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号