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

字符串函数---(1)

字符函数

文章目录

  • 前言
  • 1.strlen 的使用和模拟实现
  • 2.strcpy 的使用和模拟实现
  • 3. strcat 的使用和模拟实现
  • 4. strcmp 的使用和模拟实现


前言

上一篇我们学习了字符函数,下来我们学习常见的字符串函数


1.strlen 的使用和模拟实现

在这里插入图片描述

size_t strlen(const char *str)

  • 字符串以 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。
  • 参数指向的字符串必须要以 ‘\0’ 结束。
  • 注意函数的返回值为 size_t,是无符号的( 易错 )
  • strlen的使用需要包含头文件
  • 学会strlen函数的模拟实现
#include<stdio.h>
#include<string.h>
#include<assert.h>
int my_strlen(const char *str)
{
	int cnt = 0;
	assert(str);
	while (*str)
	{
		cnt++;
		str++;
	}
	return cnt;
}
int main()
{
	char str[30] = "abcdefg";
	//printf("%d", strlen(str));
	int ret=my_strlen(str);
	printf("%d", ret);
	return 0;
}

2.strcpy 的使用和模拟实现

在这里插入图片描述

  • Copies the C string pointed by source into the array pointed by destination, including the
    terminating null character (and stopping at that point).
  • 源字符串必须以 ‘\0’ 结束。
  • 会将源字符串中的 ‘\0’ 拷贝到目标空间。
  • 目标空间必须足够大,以确保能存放源字符串。
  • 目标空间必须可修改。
  • 学会模拟实现。
#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strcpy(char* dest, const char* src)
{
	char* ret = dest;
	assert(src && dest);
	while (*src)
	{
		*dest = *src;
		dest++;
		src++;
	}
	return ret;
}
int main()
{
	char str1[] = "hello world!";
	char str2[20] = {0};
	//strcpy(str2, str1);
	my_strcpy(str2, str1);
	printf("%s\n", str2);
	return 0;
}

在这里插入图片描述

3. strcat 的使用和模拟实现

  • Appends a copy of the source string to the destination string. The terminating null character
    in destination is overwritten by the first character of source, and a null-character is included
    at the end of the new string formed by the concatenation of both in destination.
  • 源字符串必须以 ‘\0’ 结束。
  • 目标字符串中也得有 \0 ,否则没办法知道追加从哪里开始。
  • 目标空间必须有足够的大,能容纳下源字符串的内容。
  • 目标空间必须可修改。
  • 字符串自己给自己追加,如何?

char* my_strcat(char* dest, char* src)
{
	char* ret = dest;
	while (*dest)
	{
		dest++;
	}
	while (*src)
	{
		*dest = *src;
		dest++;
		src++;
	}return ret;
}
#include<stdio.h>
#include<assert.h>
#include<string.h>
int main()
{	
	char str1[20] = { "hello," };
	char str2[20] = { "world!" };
	strcat(str1,str2);
	printf("%s\n", str1);
	return 0;
}

在这里插入图片描述

4. strcmp 的使用和模拟实现

• This function starts comparing the first character of each string. If they are equal to each
other, it continues with the following pairs until the characters differ or until a terminating
null-character is reached.

  • 标准规定:
  • 第⼀个字符串大于第⼆个字符串,则返回大于0的数字
  • 第⼀个字符串等于第⼆个字符串,则返回0
  • 第⼀个字符串小于第⼆个字符串,则返回小于0的数字
  • 那么如何判断两个字符串? 比较两个字符串中对应位置上字符ASCII码值的大小。
#include<string.h>
#include<stdio.h>
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
	int ret = 0;
	assert(str1 != NULL);
	assert(str2 != NULL);
	while (*str1 == *str2)
	{
		if (*str1 == '\0')
			return 0;
		str1++;
		str2++;
	}
	return *str1 - *str2;

}
int main()
{
	char str1[] = "abcd";
	char str2[] = "abqd";
	//int ret = strcmp(str1, str2);
	int ret = my_strcmp(str1, str2);
	printf("%d", ret);
	return 0;
}


http://www.kler.cn/a/274734.html

相关文章:

  • Oracle 中间件 Webcenter Portal服务器环境搭建
  • 开源轮子 - Logback 和 Slf4j
  • 7-2 排序
  • WeakAuras NES Script(lua)
  • AI的进阶之路:从机器学习到深度学习的演变(二)
  • 物联网:全面概述、架构、应用、仿真工具、挑战和未来方向
  • 离散制造企业MES与流程企业MES的区别
  • LiveGBS流媒体平台GB/T28181功能-HTTPS 服务支持配置开启什么时候需要开启HTTPS测试SSL证书配置HTTPS测试证书
  • 技术周刊 116 期:Visual Copilot、INP、Kimi 支持 200 万字上下文、Grok 开源、Figure 01、Open Sora 开源
  • 算法---二分查找练习-3(山脉数组的顶峰索引)
  • 数据仓库的两种建模方法
  • 每日五道java面试题之mybatis篇(五)
  • HTML_CSS学习:超链接、列表、表格、表格常用属性
  • opencv逐帧获取视频图片
  • 记录C++中,子类同名属性并不能完全覆盖父类属性的问题
  • Android Studio实现内容丰富的安卓图书馆座位图书预约系统
  • Tcl学习笔记(一)——环境搭建及基本语法
  • 开源数据集 nuScenes 之 3D Occupancy Prediction
  • 绝地求生:现在购买通行证还能兑换成长型武器吗?
  • java volatile
  • 【Linux】从零开始认识进程 — 前篇
  • 【数据库】MySQL库与表的基本操作
  • AIGC从入门到精通
  • (一)Linux+Windows下安装ffmpeg
  • 如何在Tomcat中的webapp中手动发布
  • PX4|基于FAST-LIO mid360的无人机室内自主定位及定点悬停