C语言进阶版第12课—字符函数和字符串函数1

文章目录

  • 1. 字符分类函数
    • 1.1 库函数iscntrl
    • 1.2 库函数isspace
    • 1.3 库函数islower和isupper
  • 2. 字符转换函数
  • 3. strlen函数的使用和模拟实现
    • 3.1 strlen函数的使用
    • 3.2 strlen函数的模拟实现
  • 4. strcpy函数的使用和模拟实现
    • 4.1 strcpy函数的使用
    • 4.2 strcpy函数的模拟实现
  • 5. strcat函数的使用和模拟实现
    • 5.1 strcat函数的使用
    • 5.2 strcat函数的模拟实现
  • 6. strcmp函数的使用和实现
    • 6.1 strcmp函数的使用
    • 6.2 strcmp函数的模拟实现
  • 7. strncpy函数的使用
  • 8. strncat函数的使用
  • 9. strncmp函数的使用

1. 字符分类函数

  以下这些分类函数的头文件是ctype.h

函数如果函数参数符合下列条件则返回true
iscntrl任何控制字符
isspace空白字符‘ ’、换页‘\f’、换行’\n’、回车‘\r’、制表符’\t’、垂直制表符’\v’
isdigit十进制数字0~9字符
isxdigit十六进制数字,包括所有十进制数字字符,小写字母a~f,大写字母A~F
islower小写字母a~z
isupper大写字母
isalpha字母a~z或A~Z
isalnum字母或者数字,a~z,A~Z,0~9
ispunct标点符号,任何不属于数字或字母的图形字符(可打印)
isgraph任何图形字符
isprint任何可打印字符,包括图形字符和空白字符

1.1 库函数iscntrl

在这里插入图片描述


在这里插入图片描述

1.2 库函数isspace

在这里插入图片描述


在这里插入图片描述

1.3 库函数islower和isupper

  • int islower( int c) 用来判断c是否为小写字母,是就返回大于0的数,即true,否则返回0(flase)
  • int isupper( int c) 用来判断c是否为大写字母,是就返回大于0的数,即true,否则返回0(flase)
  • 大小写字母转换
    在这里插入图片描述
  • 上述代码全是小写字母,从而可以利用大小写字母之间的差值32进行转换
  • 如果字符串既有大写又有小写呢?
    在这里插入图片描述
    在这里插入图片描述

2. 字符转换函数

  • int tolower( int c );将参数传进去的大写字母转换为小写
  • int toupper( int c );将参数传进去的小写字母转换为大写
    在这里插入图片描述
    在这里插入图片描述

3. strlen函数的使用和模拟实现

3.1 strlen函数的使用

  • size_t strlen ( const char* str)
  • strlen函数计算的是字符串中’\0’之前的字符个数,不包含’\0’
  • strlen函数的返回类型是size_t,无符号整型
  • 传给strlen的参数指向的字符串必须以’\0’结尾
  • strlen是从传过来的参数地址开始计数,直到遇到’\0’结束

在这里插入图片描述


在这里插入图片描述

3.2 strlen函数的模拟实现

//strlen函数的模拟实现
//方法1:计数器
#include <stdio.h>
#include <assert.h>
size_t my_strlen(const char* p)
{
	int count = 0;
    assert(p != NULL);
	while (*p != '\0')
	{
		count++;
		p++;
	}
	return count;
}
int main()
{
	const char* str = "abcde";
	size_t sum = my_strlen(str);
	printf("%zd\n", sum);
	return 0;
}

//方法2:指针-指针
//用指向起始位置地址的指针-指向‘\0’地址的指针
#include <stdio.h>
#include <assert.h>
size_t my_strlen(const char* p)
{
 
	char* s = p;
  assert(p);
  assert(s);
	while (*p)
	{
		p++;
	}
	return p - s;
}
int main()
{
	const char* str = "abcde";
	size_t sum = my_strlen(str);
	printf("%zd\n", sum);
	return 0;
}

在这里插入图片描述


//方法3:函数递归
#include <stdio.h>
#include <assert.h>
size_t my_strlen(const char* s)
{
	assert(s);
	if (*s == '\0')
		return 0;
	else
		return 1 + my_strlen(s + 1);
}

int main()
{
	const char* str = "abcde";
	size_t sum = my_strlen(str);
	printf("%zd\n", sum);
	return 0;
}

  关于第三种函数递归的方式实现strlen函数,可参考函数递归

4. strcpy函数的使用和模拟实现

4.1 strcpy函数的使用

  • 我们如果想将一个数组里的字符串复制到另一个数组里,下面这个代码可行吗?
#include <stdio.h>
int main()
{   
    char arr1[]="abcdef";
    char arr2[30]={0};
    arr2 = arr1;
    printf("%s\n",arr2);
    return 0;
}

在这里插入图片描述


  那么我问如何把arr1里面的字符串复制到arr2里呢?
  C语言定义了一个专门用来字符串复制的函数:strcpy函数

  • char* strcpy ( char* destination, const char* source );
  •   |             |             |
  •   |           目标空间         源头
  • 返回的是目标空间起始地址

在这里插入图片描述


在这里插入图片描述


  • strcpy函数就是将源头字符串复制到目标空间里去,同时也会把源头字符串末尾的’\0’复制过去

在这里插入图片描述


  • strcpy函数使用时,源字符串必须以’\0’结尾

在这里插入图片描述


在这里插入图片描述


  • 目标空间必须足够大,确保能存放源字符串
  • 目标空间必须可修改

在这里插入图片描述


4.2 strcpy函数的模拟实现


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


5. strcat函数的使用和模拟实现

5.1 strcat函数的使用

  • char* strcat ( char* destination, const char* source );
  •   |             |             |
  •   |           目标空间         源头
  • 返回的是目标空间起始地址

  • strcat函数是用来将源头字符串追加到目标字符串后面
  • strcat函数使用时,源字符串也必须以’\0’结尾
  • 目标空间必须足够大,能够容纳追加后的字符串
  • 目标空间必须可修改

在这里插入图片描述


5.2 strcat函数的模拟实现


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


6. strcmp函数的使用和实现

6.1 strcmp函数的使用


在这里插入图片描述


在这里插入图片描述


6.2 strcmp函数的模拟实现

//模拟实现strcmp函数
#include <stdio.h>
#include <assert.h>
int my_strcmp(const char* str1, const char* str2)
{
	assert(str1 != NULL);
	assert(str2 != NULL);
	while (*str1 != '\0')
	{
		if (*str1 < *str2)
			return -1;
		else if (*str1 > *str2)
			return 1;
		else
		{
			str1++;
			str2++;
		}
	}
	if (*str1 == *str2)
		return 0;
}
int main()
{
	char arr1[] = "aabcdef";
	char arr2[] = "aabcdefg";
	if (my_strcmp(arr1, arr2) > 0)
	{
		printf(">\n");
	}
	else if (strcmp(arr1, arr2) < 0)
	{
		printf("<\n");
	}
	else
		printf("=\n");

	return 0;
}

在这里插入图片描述


7. strncpy函数的使用


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


8. strncat函数的使用


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


9. strncmp函数的使用


在这里插入图片描述


在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/884053.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++读取txt文件中的句子在终端显示,同时操控鼠标滚轮(涉及:多线程,产生随机数,文件操作等)

文章目录 &#x1f315;运行效果&#x1f315;功能描述&#x1f315;代码&#x1f319;mian.cpp&#x1f319;include⭐MouseKeyControl.h⭐TipsManagement.h &#x1f319;src⭐MouseControl.cpp⭐TipsManagement.cpp &#x1f315;运行效果 &#x1f315;功能描述 线程一&am…

web前端-CSS引入方式

一、内部样式表 内部样式表(内嵌样式表)是写到html页面内部,是将所有的 CSS 代码抽取出来,单独放到一个<styie>标签中。 注意: ① <style>标签理论上可以放在 HTML文档的任何地方&#xff0c;但一般会放在文档的<head>标签中 ② 通过此种方式&#xff0c;可…

开发提效的工具tabby快速入门

1.什么是tabby&#xff1f; Tabby is an open-source, self-hosted AI coding assistant. With Tabby, every team can set up its own LLM-powered code completion server with ease. 官方网站&#xff1a;https://tabby.tabbyml.com/ 2.tabby服务安装(Hugging Face Spaces…

虚幻引擎的三种输入模式和将控件显示到屏幕上

首先要知道一个概念 , HUD 和 Input 都是由 PlayerController 来控制的 而虚幻的Input控制模式有三种 Set Input Mode Game Only (设置输入模式仅限游戏): 视角会跟着鼠标旋转 , 就是正常游戏的模式 , 这也是游戏默认输入模式 Set Input Mode UI Only (设置输入模式仅限UI): …

【C++】 vector 迭代器失效问题

【C】 vector 迭代器失效问题 一. 迭代器失效问题分析二. 对于vector可能会导致其迭代器失效的操作有&#xff1a;1. 会引起其底层空间改变的操作&#xff0c;都有可能是迭代器失效2. 指定位置元素的删除操作--erase3. Linux下&#xff0c;g编译器对迭代器失效的检测并不是非常…

通信工程学习:什么是FDD频分双工

FDD:频分双工 FDD(频分双工,Frequency Division Duplexing)是一种无线通信技术,它通过将频谱划分为上行和下行两个不重叠的频段来实现同时双向通信。以下是FDD频分双工的详细解释: 一、定义与原理 定义: FDD是一种无线通信系统的工作模式,其中上行链路(从移动…

每日OJ_牛客_OR59字符串中找出连续最长的数字串_双指针_C++_Java

目录 牛客_OR59字符串中找出连续最长的数字串 题目解析 C代码1 C代码2 C代码3 Java代码 牛客_OR59字符串中找出连续最长的数字串 字符串中找出连续最长的数字串_牛客题霸_牛客网 题目解析 双指针&#xff1a; 遍历整个字符串&#xff0c;遇到数字的时候&#xff0c;用双…

坚果N1 Air高亮版对比当贝D6X高亮版:谁是2000元预算的投影仪王者?

当贝D6X高亮版新品升级&#xff0c;对于那些计划在这个时间点购买投影仪的用户来说&#xff0c;现在是个绝佳的时机&#xff01;特别是那些预算在两千元左右的&#xff0c;目前两千元左右的投影仪&#xff0c;无外乎两款产品&#xff0c;当贝D6X高亮版和坚果N1 Air高亮版&#…

常见区块链数据模型介绍

除了加密技术和共识算法&#xff0c;区块链技术还依赖于一种数据模型&#xff0c;它决定了信息如何被结构化、验证和存储。数据模型定义了账户如何管理&#xff0c;状态转换如何发生&#xff0c;以及用户和开发者如何与系统交互。 在区块链技术的短暂历史中&#xff0c;数据…

13年408计算机考研-计算机网络

第一题&#xff1a; 解析&#xff1a;OSI体系结构 OSI参考模型&#xff0c;由下至上依次是&#xff1a;物理层-数据链路层-网络层-运输层-会话层-表示层-应用层。 A.对话管理显然属于会话层&#xff0c; B.数据格式转换&#xff0c;是表示层要解决的问题&#xff0c;很显然答案…

怎样用云手机进行TikTok矩阵运营?

在运营TikTok矩阵时&#xff0c;许多用户常常面临操作复杂、设备过多等问题。如果你也感到操作繁琐&#xff0c;不妨考虑使用云手机。云手机具备丰富的功能&#xff0c;能够帮助电商卖家快速打造高效的TikTok矩阵。接下来&#xff0c;我们将详细解析这些功能如何提升你的运营效…

智能化转型新篇章:EasyCVR引领大型连锁超市视频监控进入AI时代

随着科技的飞速发展&#xff0c;视频监控系统在各行各业中的应用日益广泛&#xff0c;大型连锁超市作为人员密集、商品繁多的公共场所&#xff0c;其安全监控显得尤为重要。为了提升超市的安全管理水平、减少损失、保障顾客和员工的安全&#xff0c;引入高效、全面的视频监控系…

Meta震撼发布Llama3.2大规模模型

在2024.9.26的年Meta Connect大会上&#xff0c;Meta正式推出了Llama3.2模型&#xff0c;旨在提升边缘AI和视觉任务的能力。Llama3.2系列包括11亿和90亿参数的中型视觉模型&#xff0c;以及为移动设备优化的1亿和3亿参数的小型模型&#xff0c;并针对高通和联发科的硬件平台进行…

Navicat数据库管理工具实现Excel、CSV文件导入到MySQL数据库

1.所需要的工具和环境 navicat等第三方数据库管理工具云服务器中安装了 1Panel面板搭建的mysql数据库 2.基于 1Panel启动mysql容器 2.1 环境要求 安装前请确保您的系统符合安装条件&#xff1a; 操作系统&#xff1a;支持主流 Linux 发行版本&#xff08;基于 Debian / Re…

C#和数据库高级:虚方法

文章目录 一、抽象方法和抽象类中的思考1.1、回顾抽象方法的特点1.2、针对抽象方法问题的引出 二、虚方法的使用步骤2.1、虚方法重写方法的调用2.2、系统自带的虚方法2.3、重写Equals方法2.4、虚方法和抽象方法的比较 三、虚方法和抽象方法的联系3.1、ToString()方法的应用 一、…

ARM点灯---看手册

知识点&#xff1a; 一个程序可能会遇到内存泄漏问题&#xff0c;可能一次运行泄漏几M大小&#xff0c;执行几个小时才会泄漏到站崩溃&#xff0c;所以要查看是否有内存泄漏。 查看手册教程 0927-上午 视频1&#xff1a;25&#xff1b;00 硬件程序开发流程 最小系统:单片…

单词的秘密3:从eight说起

单词的秘密&#xff0c;所谓秘密&#xff0c;就是指只有圈内的人知道&#xff08;而圈子往往代表了狭隘或某种专业性、独特或独占或垄断性&#xff09;&#xff0c;或者只有少数的人知道。 同样&#xff0c;一些单词的秘密&#xff0c;如果我不说&#xff0c;可能这一辈子&…

简单的spring缓存 Cacheable学习

简单的spring缓存 Cacheable学习 1.需求 项目中有很多的方法查询的数据其实是不会经常变的&#xff0c;但是其整体的查询sql以及调用第三方数据获取数据花费的时间很长&#xff0c;现在考虑对此类型的接口进行优化&#xff0c;首先想到的是对其进行缓存操作&#xff0c;所以简…

Docker全家桶:从0到加载本地项目

安装docker&#xff0c;我们选择的是CentenOS 7。 目录 Docker安装 命令 命令别名 数据卷挂载 Dockerfile 容器网络互联 Docker安装 1. 先删除本机旧的或者残留的docker sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest …

Python实战:爬取网页图片

文章目录 一、实战概述二、图片网站三、爬取图片1、编写程序&#xff0c;实现功能2、运行程序&#xff0c;查看结果 四、实战小结 一、实战概述 在本实战项目中&#xff0c;我们编写了一个Python程序&#xff0c;用于从指定的图片网站&#xff08;https://pic.netbian.com/4kf…