模拟实现不受限制的字符串函数--C语言版

举报
游离 发表于 2023/02/03 11:50:55 2023/02/03
【摘要】 C语言中提供了许多十分好用的库函数,一旦我们掌握了它们,我们使用C语言写代码就会变得更加得心应手。1.strlenstrlen函数就是计算字符串的长度的,它会一直读取到\0,它的返回值就是在字符串中'\0' 前面出现的字符个数(不包括\0)。 而了解strlen的实现原理也会让我们更好的理解代码//模拟实现strlen// 计算器版本//#include<stdio.h>//#include...

C语言中提供了许多十分好用的库函数,一旦我们掌握了它们,我们使用C语言写代码就会变得更加得心应手。

1.strlen

strlen函数就是计算字符串的长度的,它会一直读取到\0,它的返回值就是在字符串中'\0' 前面出现的字符个数(不包括\0)。 而了解strlen的实现原理也会让我们更好的理解代码

//模拟实现strlen
// 计算器版本
//#include<stdio.h>
//#include<assert.h>
//int my_strlen(const char *str)
//{
//	assert(str);
//	int count = 0;
//	while (*str++ != 0)
//	{
//		count++;
//	}
//	return count;
//}
//
//int main()
//{
//	char arr[] = {"abcdef"};
//	int ret = my_strlen(arr);
//	printf("%d", ret);
//	return 0;
//}

复制代码

当然,strlen绝对不止这一种写法,如果各位想看,可以移步strlen的三种模拟实现方法

2.stccpy

strcpy是将字符串b复制到字符串a上,其中源字符串必须要以\0结束,并且目标字符串必须要有足够大的空间

#include<stdio.h>
#include<string.h>
void mine_strcpy(char* dest, char* sou)
{
	while (*dest++ = *sou++)//当sou将\0传给dest时,while里面的值是0,自动结束了循环---既copy了\0
		                      //又使循环停止
	{
		;
	}
}
int main()
{
	char arr1[] = "aaaaaaaaaaaaaa";
	char arr2[] = "hello";
	mine_strcpy(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}
复制代码

3.strcat

strcat是字符串追加函数,目标字符串必须要有足够大的空间去容纳原字符串,并且原字符串必须要以\0结尾 strcat的模拟实现:首先需要找到目标字符串的\0位置,接着要在\0的位置,将要复制的字符串拷贝过去即可。

#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strcat(char* dest, const char* src)
{
	assert(dest && src);
	char* ret = dest;
   //1.找到目标字符串的\0
	while (*dest)
	{
		dest++;
	}
   //2.接着追加过去(包括\0)(就是strcpy的思路)
	while (*dest++ = *src++)
	{
		;
	}
	return ret;
}
int main()
{
	char arr1[50] = {"stay foolish,"};
	char arr2[20] = {"stay hungry"};
	//my_strcat(arr1, arr2);
	printf("%s", my_strcat(arr1, arr2));//链式访问
	return 0;
}
复制代码

4.strcmp

strcmp就是比较两个字符串的大小 strcmp的实现思路就是一个一个字符的进行比较,知道找到不一样的或者全部一样的为止

//模拟实现strcmp
#include<stdio.h>
#include<assert.h>
int my_strcmp(const char* p,const char* q)
{
	assert(p && q);
	while (*p == *q)
	{
		if (*p == '\0')//*q也为'\0'
		{
			return 0;
		}
		p++;
		q++;
	}
  //if (*p > *q)
	//	return 1;
	//else
		//return -1;
	return  *p - *q;
}
int main()
{
	char p[] = "abcd";
	char q[] = "abe";
	int ret = my_strcmp(p, q);
	if (ret > 0)
		printf("p>q\n");
	else if (ret < 0)
		printf("p<q\n");
	else
		printf("p==q\n");
	return 0;
}
复制代码

以上介绍的都是长度不受限制等函数

欢迎点赞收藏关注,感谢大家的支持!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。