模拟实现C语言中的字符串函数

本文介绍了C语言中的六种基本字符串操作函数的实现方法,包括字符串比较、求长度、拷贝、追加、查找子串及查找指定字符串最后一次出现的位置。通过模拟实现这些函数,加深了对字符串操作的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、int strcmp(const char* dest, const char* str)

字符串比较函数,比较字符串dest和str,当dest>str时,返回值>0;当dest<str时,返回值<0;当dest=str时,返回值=0.

模拟实现代码:

#include<stdio.h>
#include<assert.h>
int mystrcmp(const char* dest, const char* str)
{
	assert(dest);
	assert(str);
	while (*dest == *str)
	{
		if (*dest == '/0')
		{
			return 0;
		}
		dest++;
		str++;
	}
	return *dest - *str;
}
int main()
{
	char* s1 = "dbcdef";
	char* s2 = "dacd";
	int ret = mystrcmp(s1, s2);
	if (ret > 0)
	{
		printf("s1>s2\n");
	}
	else if (ret == 0)
	{
		printf("s1==s2\n");
	}
	else
	{
		printf("s1<s2\n");
	}
	getchar();
	return 0;
}

2、int strlen(const char* dest)

字符串长度函数,求取字符串dest的长度(不包含\0)

模拟实现代码:

#include<stdio.h>
int mystrlen(const char* dest)
{
	int count = 0;
	while (*dest!='\0')
	{
		count++;
		*dest++;
	}
	return count;
}
int main()
{
	char* s1 = "";
	int ret = mystrlen(s1);
	printf("字符串长度为%d", ret);
	getchar();
	return 0;
}
使用指针模拟实现代码:
#include<stdio.h>
int mystrlen(const char* dest)
{
	const char *str = dest;
	while (*str++)
		;
	return str - dest - 1;
}
int main()
{
	int len = mystrlen("abcdef");
	printf("%d\n", len);
	getchar();
	return 0;
}
使用递归模拟实现代码:
#include<stdio.h>
int mystrlen(const char* dest)
{
	if (*dest == '\0')
	{
		return 0;
	}
	else
	{
		return 1+mystrlen(dest + 1);
	}
}
int main()
{
	int ret = mystrlen("abcdef");
	printf("字符串的长度为%d\n", ret);
	getchar();
	return 0;
}

3、char* strcpy(char* dest, const char* str)
字符串拷贝函数,把从str地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间(str和dest所指的空间区域不能重叠且dest必须有足够的空间存储str的字符串)

模拟实现代码:

#include<stdio.h>
#include<assert.h>
void mystrcpy(char* dest, const char* str)
{
	assert(dest);
	assert(str);
	while (*dest++ = *str++)
	{
		;
	}
	*dest = '\0';
}
int main()
{
	char s1[20];
	char* s2 = "belo";
	mystrcpy(s1, s2);
	printf("%s\n",s1);
	getchar();
	return 0;
}

链式访问模拟实现代码:

#include<stdio.h>
#include<assert.h>
char* mystrcpy(char* dest, const char* str)
{
	assert(dest);
	assert(str);
	char* ret = dest;
	while (*dest++ = *str++)
	{
		;
	}
	*dest = '\0';
	return ret;
}
int main()
{
	char s1[20];
	char* s2 = "belo";
	printf("%d\n", strlen(mystrcpy(s1, s2)));
	getchar();
	return 0;
}

4、char* strcat(char* dest, const char* str)

字符串追加函数,把str所指的字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'

#include<stdio.h>
#include<assert.h>
char* mystrcat(char* dest, const char* str)
{
	assert(dest);
	assert(str);
	char *ret = dest;
	while (*dest)
	{
		dest++;
	}
	while (*dest++ = *str++)
	{
		;
	}
	return ret;
}
int main()
{
	char s1[20] = "abcde";
	const char* s2 = "fghil";
	printf("%s\n", mystrcat(s1, s2));
	getchar();
	return 0;
}

5、char* strstr(const char* dest, const char* str)

在字符串中查找子串,并返回dest字符串的其余部分,如果没有找到,返回NULL

模拟实现代码:

#include<stdio.h>
char* mystrstr(const char* dest, const char* str)
{
	char* ptr = dest;
	char* p1 = NULL;
	char* p2 = NULL;
	while (*dest)
	{
		p1 = ptr;
		p2 = str;
		while (*p1++ == *p2++)
		{
			p1++;
			p2++;
			if (*p2=='\0')
			{
				return ptr;
			}
		}
		ptr++;
	}
	return NULL;
}
int main()
{
	const char* s1 = "abcdefgh";
	const char* s2 = "def";
	char* ch = mystrstr(s1, s2);
	if (ch != NULL)
	{
		printf("%s\n", ch);
	}
	else
	{
		printf("not exist\n");
	}
	getchar();
	return 0;
}

6、char* strrstr(char *dest,char* str)

在字符串中查找指定字符串最后一次出现的位置

#include<stdio.h>
#include<assert.h>
#include<string.h>
char* mystrrstr(const char* dest, const char* str)
{
	assert(dest);
	assert(str);
	char *last = NULL;
	char *cur = strstr(dest, str);
	while (cur != NULL)
	{
		last = cur;
		cur = strstr(cur + 1, str);
	}
	return last;
}
int main()
{
	char* p = "abcdefgabcdefg";
	char* q = "de";
	char* ret = mystrrstr(p, q);
	printf("%s\n", ret);
	getchar();
	return 0;
}



 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值