C语言strlen,strcpy,strcmp,strcat,strstr字符串操作函数实现

 更新时间:2022年09月07日 10:34:36   作者:三天晒网且从不打鱼  
这篇文章主要介绍了C语言strlen,strcpy,strcmp,strcat,strstr字符串操作函数实现,,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下

前言:

今天来实现strlen、strcpy、strcmp、strcat、strstr三个比较常见的字符串操作函数,具体实现如下。

strlen

C 库函数 size_t strlen(const char *str) 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。

int my_strlen(const char* p) {
	int size = 0;
	//找到末尾停止
	while (*p != '\0') {
		p++;
		size++;
	}
	return size;
}

strcpy

C 库函数 char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest。需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。

char* my_strcpy(char* dest, const char* src) {

	//判断传入是否为空
	if (src == NULL || dest == NULL) {
		return dest;
	}
	char* pdest = dest;
	//不为空打印
	while (*src != '\0') {
		*pdest = *src;
		pdest++;
		src++;
	}
	//末尾加'\0'
	*pdest = '\0';
	return dest;

}

strcmp

C 库函数 int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较。

int my_strcmp(const char* str1, const char* str2) {
	//一直往后查找直到其中一个结尾或者他们二者不相等为止
	while (*str1 != '\0' && *str2 != '\0' && (*str1 == *str2)) {
		str1++;
		str2++;
	}
	return *str1 - *str2;
}

strcat

C 库函数 char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。

char* my_strcat(char* dest, const char* src) {

	char* pdest = dest;
	//pdset先走到末尾
	while (*pdest != '\0') {
		pdest++;
	}
	//链接
	while (*src != '\0') {
		*pdest = *src;
		pdest++;
		src++;
	}
	//加结尾标志'\0'
	*pdest = '\0';
	return dest;
}

strstr

C 库函数 char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’。

char* my_strstr(const char* dest, const char* src) {

	//断言非空
	assert(dest && src);

	while (*dest != '\0') {
		//记录dest src初始位置
		char* pdest = dest;
		char* psrc = src;
		//若相等则继续比较
		while (*pdest == *psrc || *psrc == '\0') {
			//如果psrc=='\0' 则说明找到子串
			if (*psrc == '\0') {
				return dest;
			}
			//psrc 未到 \0 则继续比较是否相等
			pdest++;
			psrc++;
		}
		dest++;
	}
	return NULL;
}

到此这篇关于C语言strlen,strcpy,strcmp,strcat,strstr字符串操作函数实现的文章就介绍到这了,更多相关C语言字符串操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言实现学生宿舍信息管理系统课程设计

    C语言实现学生宿舍信息管理系统课程设计

    这篇文章主要为大家详细介绍了C语言实现学生宿舍信息管理系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C++调试记录与心得分享

    C++调试记录与心得分享

    本文给大家详细记录了一次C++的调试过程,以及调试的心得,非常的实用,有需要的小伙伴可以参考下
    2017-07-07
  • C语言中堆空间的生成与释放详解

    C语言中堆空间的生成与释放详解

    以下是对C语言中堆空间的生成与释放进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-08-08
  • cocos2dx实现橡皮擦效果以及判断是否擦除完毕

    cocos2dx实现橡皮擦效果以及判断是否擦除完毕

    这篇文章主要为大家详细介绍了cocos2dx实现橡皮擦效果以及判断是否擦除完毕,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • QT使用QComBox和QLineEdit实现模糊查询功能

    QT使用QComBox和QLineEdit实现模糊查询功能

    模糊查询是指根据用户输入的文本,在下拉框的选项中进行模糊匹配,并动态地显示匹配的选项,本文将使用QComBox和QLineEdit实现模糊查询功能,需要的可以参考下
    2023-11-11
  • C++数组的定义详情

    C++数组的定义详情

    这篇文章主要介绍了C++数组的定义详情,上一篇文章我们学习了类型,接下俩我们九在类型的基础上展开本篇内容数组的常用方法以及C++标准库提供的一些关于数组的容器,需要的朋友可以参考一下,希望对你有所帮助
    2021-12-12
  • C语言中计算正弦的相关函数总结

    C语言中计算正弦的相关函数总结

    这篇文章主要介绍了C语言中计算正弦的相关函数总结,包括正弦和双曲线正弦以及反正弦的函数,需要的朋友可以参考下
    2015-08-08
  • C语言使用ffmpeg和sdl实现多路音频播放

    C语言使用ffmpeg和sdl实现多路音频播放

    这篇文章主要为大家详细介绍了一种基于ffmpeg和sdl实现的音频多路混合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下
    2023-06-06
  • C++中的std::nothrow使用

    C++中的std::nothrow使用

    这篇文章主要介绍了C++中的std::nothrow使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Visual Studio Code (vscode) 配置C、C++环境/编写运行C、C++的教程详解(主要Windows、简要Linux)

    Visual Studio Code (vscode) 配置C、C++环境/编写运行C、C++的教程详解(主要Windo

    这篇文章主要介绍了Visual Studio Code (vscode) 配置C、C++环境/编写运行C、C++(主要Windows、简要Linux),本文通过实例截图给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03

最新评论