str库函数模拟实现

2023-05-16

常见str函数功能表:


strcat——将字符串str2连接到str1之后,并返回指针str1

strncat——将字符串from 中至多count个字符连接到字符串to中,追加空值结束符。返回处理完成的字符串

strchr——返回一个指向str 中ch 首次出现的位置,当没有在str 中找ch到返回NULL

strrchr——返回一个指针,它指向字符ch 在字符串str,末次出现的位置,如果匹配失败,返回NULL

strcoll——比较字符串str1 和 str2, 很象strcmp. 但是, strcoll使用在目前环境中由setlocale()设定的次序进行比较。

strcmp——比较两个字符串是否相等比较字符串str1 and str2,相等返回0,大于返回大于0的数,小于返回小于0的数

strncmp——比较字符串str1 和 str2中至多n个字符

strlen——返回字符串str 的长度( 即空值结束符之前字符数目)

strcpy——复制字符串from 中的字符到字符串to,包括空值结束符。返回值为指针to

strncpy——将字符串from 中至多count个字符复制到字符串to中,如果字符串from 的长度小于count,其余部分用'\0'填补。返回处理完成的字符串

strstr——返回一个指针,它指向字符串str2 首次出现于字符串str1中的位置,如果没有找到,返回NULL

strspn——返回字符串str1中第一个不包含于字符串str2的字符的索引


代码实现:


strcat


char* MyStrcat(char *src, const char*dst)
{
	assert(src && dst);
	int count = 0;
	char* ret = src;
	while (*src)	//如果把++合并写到上面来会多加一次
	{
		src++;
	}
	while (*src++ = *dst++)
	{
		;
	}
	return ret;
}

strncat


char* MyStrncat(char* str1, const char* str2,size_t n)
{
	assert(str1 && str2);
	char* tem = str1;

	while (*str1)
	{
		str1++;
	}

	while (n--)
	{
		if (!(*str1++ = *str2++))
		{
			return tem;
		}
		*str1 = '\0';
	}

	return tem;
}


strrchr


const char* MyStrchr(const char* str, char ch)
{
	assert(str);
	while (*str)
	{
		if (*str == ch)
			return str; 
		str++;
	}
	return NULL;
}

strchr


const char* MyStrrchr(const char* str,char ch)
{
	assert(str);
	const char* tmp = str;
	while (*str++)	//先让指针指向\0
	{
		;
	}

	while (--str != tmp)	//只要str还没有减到tmp刚开始保存的初始位置
	{
		if (*str == ch)
			return str;
	}

	return NULL;
}


strcoll


int MyStrcoll(const char* dst, const char* src)
{
	assert(dst && src);
	int ret = 0;
	while (!(ret = *dst-*src))
	{
		dst++;
		src++;
	}
	if (ret > 0)
		return 1;
	else if (ret < 0)
		return -1;
	else
		return ret;
}

stcpy


char* MyStrcpy(char* dst, const char* src)		//src为原字符串,dst为目标字符串
{
	assert(src && dst);
	char* ret = dst;	//先让ret保存dst的起始位置
	while (*dst++ = *src++)		//将src中的值一次拷贝到dst之中
	{
		;
	}
	return dst;
}

strlen


size_t MyStrlen1(const char* str)	//加const防止str被修改
{
	assert(str);		//断言,防止str为空指针或者野指针的情况
	size_t count = 0;
	while (*str++)
	{
		++count;
	}
	return count;
}

size_t MyStrlen2(const char* str)
{
	assert(str);
	const char* eos = str;
	while (*eos++)
		;
	return (eos - str - 1);
}

strcmp


int MyStrcmp(const char* dst, const char* src)
{
	assert(dst && src);
	int ret = 0;
	while (!(ret = *dst - *src))
	{
		src++;
		dst++;
	}
	
	if (ret < 0)
		return -1;

	else if(ret > 0)
		return 1;

	return ret;
}

strncmp


int MyStrncmp(const char* str1, const char* str2, size_t n)
{
	assert(str1 && str2);
	int ret = 0;
	while (!(ret = *str1 - *str2) && n--)
	{
		++str1;
		++str2;
	}

	if (ret > 0)
	{
		return 1;
	}

	else if (ret < 0)
	{
		return -1;
	}
	return ret;
}


strncpy


char* MyStrncpy(char* str1, const char* str2, size_t n)
{
	assert(str1 && str2);
	if (!n)
		return str1;

	char* tmp = str1;
	while (n && (*str1++ = *str2++))
	{
		n--;
	}
	
	if (n)
	{
		while (n--)
		{
			*str1--;
		}
		str1 = '\0';
	}
	return tmp;
}


strstr


const char* MyStrstr(const char*str1, const char* str2)
{
	assert(str1 && str2);
	while (*str1)
	{
		if (*str1++ == *str2++)
		{
			;
		}
		++str1;
		return str1;
	}
	return NULL;
}

strspn


size_t MyStrspn(const char* str1, const char* str2)
{
	size_t index = 0;
	while (*str1++ == *str2++)
	{
		index++;
	}
	return index;
}





本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

str库函数模拟实现 的相关文章

  • k8s免费在线集群工具

    kubernetes xff08 简称 K8s xff09 是一个开源的 xff0c 用于管理云平台中多个主机上的容器化的应用 它的目标是让部署容器化的应用简单并且高效 xff08 powerful xff09 xff0c Kubernet
  • strlen函数的实现

    strlen函数作为一个在面试经常被问到的问题 xff0c 相信在不少求职的面经经历中都有强调 首先看一下strlen函数的作用和基本的作用 xff1a 计算字符串的长度而不包括 结束志 39 0 39 由此我们又可以联想到与他相类似的相对
  • C++考试小程序编程思路和简单设计

    求某一年是闰年 xff08 1 xff09 书上源程序 include lt iostream gt using namespace std int main int year bool leap cout lt lt 34 请输入年份 x
  • 取款机的语言&拆分数字&数字的秘密

    生活中我们都离不开和银行打交道 xff0c 诸如存钱取钱之类 xff0c 那么关于ATM机是如何将钱取出来和存进去的 xff0c 为什么一个小小的机子可以处理这么多不同的事务 xff0c 下面就让我们走进ATM机看看ATM机是如何工作的 模
  • 水仙花数和递归调用举例

    lt div style 61 34 font size 13 3333px widows auto font family 39 lucida Grande 39 Verdana 39 Microsoft YaHei 39 line he
  • %s使用

    lt xliff g id 61 34 mailbox 34 gt s lt xliff g gt 在android xff1a String xml文件中如下 xff1a lt string name 61 34 XXX 34 gt 34
  • 猜数字,二分法和杨辉三角

    include lt stdio h gt include lt stdlib h gt include lt time h gt void menu printf 34 1 play 0 exit n 34 int main int in
  • 逻辑思维小测试

    5位运动员参加了10米台跳水比赛 xff0c 有人让他们预测比赛结果 A选手说 xff1a B第一 xff0c 我第三 B选手说 xff1a 我第二 xff0c E第四 C选手说 xff1a 我第一 xff0c D第二 D选手说 xff1a
  • 简单逆序输出和空格转换

    1 有一个字符数组的内容为 34 student a am i 34 请你将数组的内容改为 34 i am a student 34 要求 xff1a 不能使用库函数 只能开辟有限个空间 xff08 空间个数和字符串的长度无关 xff09
  • 详解交换两个数的值

    交换两个数值 xff1a 简单来说就是将内存a中的值变成内存b中的值 xff0c 将内存b中的值变成内存a中的值 xff0c 而要想达到这种效果需要的就是交换他们彼此的地址 xff08 传地址 xff09 xff0c 如下图所示 xff08
  • 预编译小常识

    熟悉预处理标识符 xff1a LINE FILE DATE TIME include lt stdio h gt int main int i 61 0 for i 61 0 i lt 10 i 43 43 printf 34 file s
  • 数组知识总结

    一维数组 xff1a 先看两个最简单的语句 int a xff1b int b 10 显然a是一个整形变量 xff08 标量 xff09 xff0c b 10 称为数组 xff0c 表示一些整形值得集合 b表示一个指向整形的指针常量 xff
  • string函数的各种实现方式

    lt span style 61 34 font size 24px 34 gt strcpy lt span gt lt span style 61 34 font size 18px 34 gt lt span gt lt span s
  • 整数的各位数之和与指数的递归求法

    写一个递归函数DigitSum n xff0c 输入一个非负整数 xff0c 返回组成它的数字之和 include lt stdio h gt int DigitSum unsigned int n unsigned int sum 61
  • 两种计算器的实现方式

    简单的switch case实现计算器功能 xff1a include lt stdio h gt include lt stdlib h gt menu 显示计算机菜单 printf 34 1 Add n 34 printf 34 2 S
  • 简单电话本实现

    头文件模块 xff1a define CRT SECURE NO WARNINGS 1 实现一个通讯录 xff1b 通讯录可以用来存储1000个人的信息 xff0c 每个人的信息包括 xff1a 姓名 性别 年龄 电话 住址 ifndef
  • linux 画图不执行 Can't connect to X11 window server

    java在图形处理时调用了本地的图形处理库 在利用Java作图形处理 xff08 比如 xff1a 图片缩放 xff0c 图片签名 xff0c 生成报表 xff09 时 xff0c 如果运行在windows上不会出问题 如果将程序移植到Li
  • 电话本再实现

    头文件模块 xff1a define CRT SECURE NO WARNINGS 1 实现一个通讯录 xff1b 通讯录可以用来存储1000个人的信息 xff0c 每个人的信息包括 xff1a 姓名 性别 年龄 电话 住址 ifndef
  • 又一波str函数的模拟实现

    实现strchr 查找一个字符c在另一个字符串str中第一次出现的位置找到返回该位置的指针 xff0c 找不到返回NULL include lt stdio h gt char my strchr const char str int c
  • 其实你也懂指针计算

    在C语言中 xff0c 指针运算是一个让很多人感到无助的东西 xff0c 尤其在结合上数组的下标运算和指针的多级访问 xff0c 更加让指针这个东西更加神秘 xff0c 今天我们就来仔细的看一下指针之间的指向关系 下面来看一下这道题 xff

随机推荐

  • 注释转换

    编写一个小项目将一个一个文件中的注释都转换成C 43 43 的注释风格 设计部分 xff1a xff08 1 xff09 头文件模块 xff1a 包括模块中需要引用的头文件定义 xff0c 需要实现的主要函数的声明 xff08 2 xff0
  • atoi函数实现的各种考虑因素

    define CRT SECURE NO WARNINGS 1 include lt stdio h gt atoi实现 xff1a 将一个字符串转换为对应的整数 enum Status 定义两个枚举常量判断所给变量是否合法 kValid
  • 继承小结

    1 概念 面向对象程序设计使代码可以实现复用的最重要手段 xff0c 允许程序员在原有类特性的基础上进行扩展 xff0c 增加新的功能 2 定义格式 xff1a 首先是一个冒号 xff0c 后面紧跟以逗号分隔的基类列表 xff0c 其中每个
  • 到底多态有多难

    1 概念 多态 简单来说就是一种事物具有多种形式或者形态的特征 xff0c 好比我们生活中最简单的事物 xff0c 就像每天都会用到的水 xff0c 水有三态 xff0c 即固态 液态和气态 生活中这种多多态的例子很多 xff0c 同样在我
  • 解析模板(上)--模板函数

    模板引出 xff1a 在学习关于类的特性中 xff0c 有一个重要的特性叫做多态 xff0c 同样关于模板的学习也可以简单的把它理解成一种多态 xff0c 只不过模板中所涉及的多态是关于类型的替换 xff0c 正如在生活中使用模具一样 xf
  • 模板&仿函数的应用--冒泡排序

    普通版冒泡排序 对于冒泡排序的算法大家并不陌生 xff0c 将相临两个数一次比较 xff0c 然后将最大值或者最小值先排出来 xff0c 一般来说这样的话我们需要在碗面写两个函数来分别实现这两个算法 xff0c 程序代码如下 xff1a s
  • String类模拟

    span style font size 24px class String friend ostream amp operator lt lt ostream amp os String amp s 输出运算符重载 friend istr
  • win10主机ping不通win10虚拟机

    原因是ICMP回显请求规则未开启 xff0c 解决方法在文章末尾 环境说明 win10虚拟机 192 168 136 136 win10虚拟机采用的网络连接是 NAT 模式 ipconfig结果如下 xff1a 以太网适配器 Etherne
  • <操作系统> 理发店问题(选做)C语言实现

    问题描述 xff1a 代码 xff1a span class token macro property span class token directive keyword include span span class token str
  • 特殊矩阵的压缩存储及转置

    一 对称矩阵及其压缩存储 1 对称矩阵 在矩阵中最特殊的一类应该属于对称矩阵 xff0c 对称矩阵的行和列是对应相等的 对称矩阵就是关于主对角线对称 xff0c 两边的元素的值对应相等 xff0c 在数学中我们把用主对角线隔开 xff0c
  • STL浅析set&map

    map和set的底层实现原理和接口使用 1 set和map的底层实现 set和map属于STL中的一种关联式容器 xff0c 底层实现是红黑树 2 set容器的特点 1 set和map 容器中的元素自动进行有序排列 默认为升序排列 xff1
  • Linux下的文件操作权限

    Linux下进入一个目录需要什么权限 xff1f 普通用户下 xff1a 首先我们在普通用户下 xff0c 取消文件code的所有权限chmod 000 code 当我们执行cd code 想进入当前目录时 xff0c 发现权限不允许 接下
  • linux下的常见命令

    cd change directory 进入个人的主目录 cd home 进入 39 home 39 目录 39 cd 返回上一级目录 cd 返回上两级目录 cd 返回上次所在的目录 ls list 查看目录中的文件 ls l 显示文件和目
  • task_struct结构体成员小结

    背景知识 task stuct结构体 被称为进程描述符 xff0c 用 来管理进程Linux内核的进程 xff0c 这个结构体包含了一个进程所需的所有信息 它定义在 include linux sched h文件中 可以说它是linux内核
  • Linux下的简单进度条实现

    进度条 计算机在处理任务时 xff0c 实时的 xff0c 以图片形式显示处理任务的速度 xff0c 完成度 xff0c 剩余未完成任务量的大小 xff0c 和可能需要处理时间 xff0c 一般以长方形条状显示 主要功能 xff1a 1 显
  • 九大排序之——希尔排序

    希尔排序 xff1a 思想 xff1a 希尔排序是为了防止直接插入排序出现最坏情况所做的一种改进 xff0c 将原本的排序过程分为预排序和直接插入排序两个阶段 预排序阶段 xff1a 将整个预排序的序列分为若干个待排序的子序列 xff0c
  • 僵尸进程与孤儿进程模拟实现

    背景知识 僵尸进程 xff08 Zombies xff09 xff1a 1 僵尸进程是一个比较特殊的状态 xff0c 当进程退出父进程 xff08 使用wait 系统调用 xff09 没有没有读取到子进程退出的返回代码时就会产生僵尸进程 僵
  • 队列模拟实现

    队列的特点 xff1a 先进先出 后进后出 队列的常见操作 xff1a Push 往队尾插入一个元素 Pop 从队头删除一个元素 Front 返回队列的第一个元素 Back 返回队列的最后一个元素 Size 求队列的元素个数 Empty 判
  • ssh端口转发(之kettle ssh方式连接数据库)

    ssh参数解释 格式 ssh user 64 host command 选项 xff1a 1 xff1a 强制使用ssh协议版本1 xff1b 2 xff1a 强制使用ssh协议版本2 xff1b 4 xff1a 强制使用IPv4地址 xf
  • str库函数模拟实现

    常见str函数功能表 xff1a strcat 将字符串str2连接到str1之后 xff0c 并返回指针str1 strncat 将字符串from 中至多count个字符连接到字符串to中 xff0c 追加空值结束符 返回处理完成的字符串