当前位置: 首页 > article >正文

模拟实现字符函数和字符串函数(一)

目录

一、模拟实现strlen

二、模拟实现strcpy

三、模拟实现strcmp

四、模拟实现strcat

五、模拟实现strstr

  • 模拟实现strlen
  • 模拟实现strcpy
  • 模拟实现strcmp
  • 模拟实现strcat
  • 模拟实现strstr

一、模拟实现strlen

  • strlen函数是用来求字符串长度的函数

#include <stdio.h>

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

int main()
{
	char arr[] = "hello";

	int ch = my_strlen(arr);
	printf("%d\n", ch);

	return 0;
}

二、模拟实现strcpy

  • strcpy是用来实现字符串拷贝的
#include <stdio.h>
#include <assert.h>

char* my_strcpy(char* str1, const char* str2)
{
	assert(str1 && str2);
	char* cp = str1;

	while (*str2)
	{
		*str1 = *str2;
		str1++;
		str2++;
	}
	return cp;
}

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

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

三、模拟实现strcmp

  • strcmp是用来实现比较两个字符串大小的函数
#include <stdio.h>
#include <assert.h>

int my_strcmp(const char* str1, const char* str2)
{
	assert(str1, str2);
	while (*str1 == *str2)
	{
		if (*str1 == '\0')
		{
			return 0;
		}
		str1++;
		str2++;
	}
	return *str1 - *str2;
}


int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abzd";
	
	//比较两个字符串大小
	int ch = my_strcmp(arr1, arr2);

	if (ch < 0)
	{
		printf("arr1小于arr2\n");
	}
	else if (ch == 0)
	{
		printf("arr1等于arr2\n");
	}
	else
		printf("arr1大于arr2\n");

	return 0;
}

四、模拟实现strcat

  • strcat是实现在一个字符串后追加一个字符串的函数
#include <stdio.h>

char* my_strcat(char* str1, const char* str2)
{
	char* cp = str1;
	while (*str1)
	{
		str1++;
	}

	while (*str2)
	{
		*str1 = *str2;
		str1++;
		str2++;
	}
	return cp;
}

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

	my_strcat(arr1, arr2);

	printf("%s\n", arr1);

	return 0;
}

五、模拟实现strstr

  • strstr是用来实现字符串查找的
#include <stdio.h>

char* my_strstr(const char* str1, const char* str2)
{
	char* s1 = str1;
	char* s2 = str2;
	char* cp = str1;
	while (*cp)
	{
		s1 = cp;
		s2 = str2;
		while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
		{
			return cp;
		}
		else
			cp++;
	}
	return NULL;
}

int main()
{
	char arr1[20] = "abbbcdef";
	char arr2[20] = "bbc";
	char* ch = my_strstr(arr1, arr2);
	printf("%s", ch);
	return 0;
}


http://www.kler.cn/news/339472.html

相关文章:

  • YOLOv5工件检测系统 五类工件(螺丝,螺母,六角扳手,铜柱,尼龙柱)有数据集,已打好标签,已训练好,准确度高,可用于机器人抓取物品操作
  • 文件内容提取:Apache Tika 2.9.2
  • InnoDB 磁盘结构 - RedoLog
  • 【数据分享】全国地级市2000-2022年公路里程数据(Shp/Excel格式)
  • 2024年下半年软考准考证什么时候打印?
  • sklearn机器学习实战——随机森林回归与特征重要性分析全过程(附完整代码和结果图)
  • 时间卷积网络(TCN)原理+代码详解
  • 【React】setState 是怎么记住上一个状态值的?
  • 蒙特卡罗方法 - 重要采样篇
  • 《Linux从小白到高手》理论篇:深入理解Linux的计划任务/定时任务
  • Axure PR 9 开关切换 设计交互
  • JPA 概述及描述对象和表之间的映射关系注解
  • 线程安全反思录(上):ThreadLocal到底安全不?
  • 优化Kafka存储:热冷数据分层策略
  • Linux No space left on device分析和解决
  • 软件测试之压力测试
  • CentOS7 虚拟机操作系统安装及相关配置教程
  • [Algorithm][贪心][整数替换][俄罗斯套娃信封问题]详细讲解
  • PyQt入门指南七 自定义信号与槽的使用
  • “降维模糊C均值(PCA-FCM)”创新算法的聚类与可视化