C语言学习系列-->字符函数和字符串函数

文章目录
- 一、字符函数
- 1、字符分类函数
- 2、字符转换函数
- 二、字符串函数
- 1、strlen
- 概述
- 模拟实现
- 2、strcpy
- 概述
- 模拟实现
- 3、strcat
- 概述
- 模拟实现
- 3、strcmp
- 概述
- 模拟实现
- 4、有限制的字符串函数
- strncpy
- strncat
- strncmp
- 4、strstr
- 概述
- 模拟实现
一、字符函数
1、字符分类函数
包含头文件:
#include<ctype.h>
| 函数 | 如果它的参数复合下列条件就返回真(一个非零数字) |
|---|---|
| iscntrl | 任何控制字符 |
| 任何控制字符 | 空白字符:空格’ ‘,换页’\f’,换行’\n’,回车’\r’,制表符’\t’或者垂直制表符’\v’ |
| isdigit | 十进制数字0~9 |
| isxdigit | 十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A-F |
| islower | 小写字母a~z |
| isupper | 大写字母A~Z |
| isalpha | 字母a~z或A-Z |
| isalnum | 字母或者数字,a-z,A-Z ,0~9 |
| ispunct | 标点符号,任何不属于数字或者字母的图形字符(可打印) |
| isgraph | 任何图形字符 |
| isprint | 任何可打印字符,包括图形字符和空白字符 |
这些字符函数都很类似,举一个例子
将小写字母转换成大写字母
#include<stdio.h>
#include<ctype.h>int main()
{char str[] = "Test String";char c;int i = 0;while (str[i]){c = str[i];if (islower(c))c = c - 32;putchar(c);i++;}return 0;
}
运行结果
TEST STRING.
2、字符转换函数
int tolower ( int c ); //将参数传进去的⼩写字⺟转⼤写
int toupper ( int c ); //将参数传进去的⼤写字⺟转⼩写
我们知道,将小写字母转换成大写是-32,大写字母转换成小写字母是+32
那么,现在有了字符转换函数,就可以直接实现
#include <stdio.h>
#include <ctype.h>
int main()
{int i = 0;char str[] = "Test String.\n";char c;while (str[i]){c = str[i];if (islower(c))c = toupper(c);putchar(c);i++;}return 0;
}
运行结果
TEST STRING.
二、字符串函数
1、strlen
概述
size_t strlen ( const char * str );
• 字符串以 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前⾯出现的字符个数(不包含 ‘\0’ )。
• 参数指向的字符串必须要以 ‘\0’ 结束。
• 注意函数的返回值为size_t,是⽆符号的( 易错 )
• 学会strlen函数的模拟实现
模拟实现
法1:
#include<stdio.h>
#include<string.h>
#include<assert.h>size_t my_strlen(const char* str)
{int count = 0;assert(str);while (*str){count++;str++;}return count;
}int main()
{char arr[] = "abc";size_t len = my_strlen(arr);printf("%zd\n", len);return 0;
}
法2:
#include<stdio.h>
#include<string.h>
#include<assert.h>size_t my_strlen(const char* str)
{assert(str);if (*str == '\0')return 0;elsereturn 1 + my_strlen(str + 1);
}int main()
{char arr[] = "abc";size_t len = my_strlen(arr);printf("%zd\n", len);return 0;
}
法3:
#include<stdio.h>
#include<string.h>
#include<assert.h>size_t my_strlen(char* s)
{char* p = s;while (*p)p++;return p - s;
}int main()
{char arr[] = "abc";size_t len = my_strlen(arr);printf("%zd\n", len);return 0;
}
2、strcpy
概述
char * strcpy ( char * destination, const char * source );
• 源字符串必须以 ‘\0’ 结束。
• 会将源字符串中的 ‘\0’ 拷⻉到⽬标空间。
• ⽬标空间必须⾜够⼤,以确保能存放源字符串。
• ⽬标空间必须可变。
• 学会模拟实现。
模拟实现
char my_strcpy(char* dest, const char* src)
{char* ret = dest;assert(dest);assert(src);while (*dest++ = *src++){;}return ret;
}
3、strcat
概述
• 源字符串必须以 ‘\0’ 结束。
• ⽬标字符串中也得有 \0 ,否则没办法知道追加从哪⾥开始。
• ⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容。
• ⽬标空间必须可修改。
模拟实现
char my_strcat(char* dest, const char* src)
{char* ret = *src;assert(dest);assert(src);while (*dest){dest++;}while (*dest++ = *src){;}return ret;
}
3、strcmp
概述
标准规定:
◦ 第⼀个字符串⼤于第⼆个字符串,则返回⼤于0的数字
◦ 第⼀个字符串等于第⼆个字符串,则返回0
◦ 第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字
模拟实现
int my_strcmp(const char* arr1, const char* arr2)
{assert(arr1);assert(arr2);while (*arr1 == *arr2){if (*arr1 == '\0')return 0;arr1++;arr2++;}return *arr1 - *arr2;
}
4、有限制的字符串函数
前面1-3学习字符串函数,但是那些字符串函数没有个数限制,不安全
下面小编带大家了解一下有个数限制的字符串函数
strncpy
char * strncpy ( char * destination, const char * source, size_t num );
• 拷⻉num个字符从源字符串到⽬标空间。
• 如果源字符串的⻓度⼩于num,则拷⻉完源字符串之后,在⽬标的后边追加0,直到num个。
strncat
char * strncat ( char * destination, const char * source, size_t num );
#include <stdio.h>
#include <string.h>
int main()
{char str1[20];char str2[20];strcpy(str1, "To be ");strcpy(str2, "or not to be");strncat(str1, str2, 6);printf("%s\n", str1);return 0;
}
strncmp
int strncmp ( const char * str1, const char * str2, size_t num );
⽐较str1和str2的前num个字符,如果相等就继续往后⽐较,最多⽐较num个字⺟,如果提前发现不⼀
样,就提前结束,⼤的字符所在的字符串⼤于另外⼀个。如果num个字符都相等,就是相等返回0.
4、strstr
概述
char * strstr ( const char *, const char * );
在字符串中找一个子字符串
返回str2在str1中第一次出现的位置
如果str2在str1中没有出现,就返回NULL
模拟实现
#include<stdio.h>
#include<string.h>
#include<assert.h>const char* my_strstr(const char* str1, const char * str2)
{assert(str1);assert(str2);const char* cp = str1;const char* s1 = NULL;const char* s2 = NULL;//如果子串是空字符串,直接返回str1if (*str2 == '\0')return str1;while (*cp){s1 = cp;s2 = str2;while (*s1 == *s2 && *s1 && *s2){s1++;s2++;}if (*s2 == '\0')return cp;cp++;}return NULL;
}int main()
{char arr1[] = "abbbcdef";char arr2[] = "bbc";char* ret = my_strstr(arr1, arr2);if (ret != NULL)printf("%s\n", ret);elseprintf("找不到\n");return 0;
}
图解:

相关文章:
C语言学习系列-->字符函数和字符串函数
文章目录 一、字符函数1、字符分类函数2、字符转换函数 二、字符串函数1、strlen概述模拟实现 2、strcpy概述模拟实现 3、strcat概述模拟实现 3、strcmp概述模拟实现 4、有限制的字符串函数strncpystrncatstrncmp 4、strstr概述模拟实现 一、字符函数 1、字符分类函数 包含头…...
尖端AR技术如何在美国革新外科手术实践?
AR智能眼镜已成为一种革新性的工具,在外科领域具有无穷的优势和无限的机遇。Vuzix与众多医疗创新企业建立了长期合作关系,如Pixee Medical、Medacta、Ohana One、Rods & Cones、Proximie等。这些公司一致认为Vuzix智能眼镜可有效提升手术实践&#x…...
【木板】Python实现-附ChatGPT解析
1.题目 木板 时间限制:1s 空间限制:256MB 限定语言:不限题目描述: 小明有n块木板,第i (1<=i<=n) 块木板的长度为ai.小明买了一块长度为m的木料,这块木料可以切割成任意块,拼接到已有的木板上用来加长木板。 小明想让最短的木板尽量长。 请问小明加长木板后,最短木板…...
第一章:绪论
1.1 系统架构概述 架构是体现在组件中的一个系统的基本组织、它们彼此的关系与环境的关系以及指导它的设计和发展的原则。 系统是组织起来完成某一特定功能火一组功能的组件集。系统这个术语包括了单独的应用程序、传统意义上的系统、子系统、系统之系统、产品线、整个企业及…...
C++面试知识点总结
知识点总结 <<符号表示该语句将把这个字符串发送给cout;该符号指出了信息流动的路径;cout的对象属性包括一个插入运算符(<<),它可以将其右侧的信息插入到流中,endl:重起一行。在输出流中插入en…...
从智能手机到智能机器人:小米品牌的高端化之路
原创 | 文 BFT机器人 前言 在前阵子落幕的2023世界机器人大会“合作之夜”上,北京经济技术开发区管委会完成了与世界机器人合作组织、小米机器人等16个重点项目签约,推动机器人创新链和产业链融合,其中小米的投资额达到20亿! 据了…...
深度学习推荐系统(八)AFM模型及其在Criteo数据集上的应用
深度学习推荐系统(八)AFM模型及其在Criteo数据集上的应用 1 AFM模型原理及其实现 沿着特征工程自动化的思路,深度学习模型从 PNN ⼀路⾛来,经过了Wide&Deep、Deep&Cross、FNN、DeepFM、NFM等模型,进⾏了大量的、基于不…...
【Spring】aop的底层原理
🎄欢迎来到边境矢梦的csdn博文🎄 🎄本文主要梳理 Spring 中的切面编程aop的底层原理和重点注意的地方 🎄 🌈我是边境矢梦,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以…...
微信小程序开发---基本组件的使用
目录 一、scroll-view (1)作用 (2)用法 二、swiper和swiper-item (1)作用 (2)用法 三、text (1)作用 (2)使用 四、rich-tex…...
SpringBoot国际化配置组件支持本地配置和数据库配置
文章目录 0. 前言i18n-spring-boot-starter1. 使用方式0.引入依赖1.配置项2.初始化国际化配置表3.如何使用 2. 核心源码实现一个拦截器I18nInterceptorI18nMessageResource 加载国际化配置 3.源码地址 0. 前言 写个了原生的SpringBoot国际化配置组件支持本地配置和数据库配置 背…...
Shell编程之sort
sort 命令将文件的每一行作为比较对象,通过将不同行进行相互比较,从而得到最终结果。从首字符开始,依次按ASCII码值进行比较,最后将结果按升序输出。 基本语法 sort (选项)(参数) 常用选项 常用选项 -n根据字符串的数字比较-r…...
windows docker 容器启动报错:Ports are not available
docker 启动容器报错: (HTTP code 500) server error - Ports are not available: listen tcp 0.0.0.0:6379: bind: An attempt was made to access a socket in a way forbidden by its access permissions. 问题排查 检查端口是否被其它程序占用:nets…...
300. 最长递增子序列
题目描述 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示…...
DNS(域名解析系统)
含义 当我们在上网要访问莫个服务器的时候,就需要知道服务器的IP地址,但IP地址是一串数字,虽然这串数字用点分十进制已经清晰不少了,但还是不利于人们记忆和传播,于是人们使用单词来代替IP地址(例如baidu&a…...
解决jsp/html界面跳转servlet出现404错误的方法
解决jsp/html界面跳转servlet出现404错误的方法 最近在学习黑马项目过程中遇到的问题 问题一: 检查页面的跳转路径和名称拼写是否正确 问题二: tomcat发布项目时所使用的路径名称与项目不同 在idea右上角点击如图圈住的按钮 在deployment中更改出现…...
catface,使用Interface定义Controller,实现基于Http协议的RPC调用
catface 前言cat-client 模块EnableCatClientCatClientCatMethodCatNoteCatResponesWrapperCatClientConfigurationCatClientProviderCatClientFactoryCatSendInterceptorCatHttpCatPayloadResolverCatObjectResolverCatLoggerProcessorCatResultProcessorCatSendProcessorAbst…...
Linux:LVS (NAT群集搭建)
模拟环境 外网入口服务器 外网 192.168.8.88 内网ip 192.168.254.4 web1 服务器 ip 192.168.254.1 网关: 192.168.254.4 web2 服务器 ip 192.168.254.2 网关: 192.168.254.4 共享存储服务器 ip 192.168.254.3 介绍 访问 外网192.16…...
音乐格式转换mp3怎么转?跟着步骤操作一遍
音乐格式转换mp3怎么转?mp3,一种音频数据压缩格式,由于其极具优势的文件尺寸小和高质量音效,自诞生之日起就占据了主流音乐格式的头把交椅,并且至今仍然受到用户的青睐,稳居音乐领域的霸主地位。在我们繁忙…...
it监控系统可以电脑吗?有什么效果
IT业务监控已经成为公司不可或缺的一部分,以确保业务的正常运行,提高企业的竞争能力。本文将详细介绍IT业务监控的必要性、实施方法以及如何选择合适的监控工具。 IT业务监控的必要性 确保业务稳定运行 IT业务监控可以实时检测公司的工作流程&#x…...
jvs-智能bi(自助式数据分析)9.1更新内容
jvs-智能bi更新功能 1.报表增加权限功能(服务、模板、数据集、数据源可进行后台权限分配) 每个报表可以独立设置权限,通过自定义分配,给不同的人员分配不同的权限。 2.报表新增执行模式 可选择首次报表加载数据为最新数据和历…...
【AI大模型】在线大语言模型实现与学习具身智能
目录 一、在线大语言模型的核心实现原理 (一)基础模型架构与预训练优化 (二)在线部署与实时交互模块 (三)持续学习与反馈优化模块 二、在线大语言模型学习具身智能的核心路径 (一ÿ…...
3大革新性功能!VoiceFixer全方位语音修复工具让受损音频焕发新生
3大革新性功能!VoiceFixer全方位语音修复工具让受损音频焕发新生 【免费下载链接】voicefixer General Speech Restoration 项目地址: https://gitcode.com/gh_mirrors/vo/voicefixer 你是否遇到过珍贵录音因噪音模糊不清的窘境?是否因会议录音质…...
中文AI象年轻小伙与英语AI象老年人:一场算力背后的文明时差
中文AI与英语AI:一场算力背后的文明时差当AI算力的齿轮飞速运转,中文AI与英语AI的差距早已超越“风格不同”,成为算力效率、表达质感与发展潜力的全方位断层——中文AI如意气风发的年轻小伙,灵动通透、反应敏捷,以极低…...
**发散创新:基于Python的鲁棒水印技术实战解析与代码实现**在多
发散创新:基于Python的鲁棒水印技术实战解析与代码实现 在多媒体内容日益泛滥的今天,数字水印技术已成为版权保护、防伪溯源和内容认证的核心手段之一。本文将深入探讨一种基于离散余弦变换(DCT)的鲁棒图像水印嵌入与提取算法&…...
阿里云服务器+域名备案全流程避坑指南(附小程序开发必备配置)
阿里云服务器与域名备案实战指南:从小程序开发到前后端部署全解析 第一次在阿里云上配置服务器并完成域名备案的经历,就像新手司机独自上高速——既兴奋又忐忑。记得去年我们团队开发校园服务小程序时,原本计划两周完成的服务器部署ÿ…...
别再手动写ZPL了!用C#和斑马官方SDK搞定ZT410 RFID打印机(附中文乱码解决方案)
用C#驱动斑马ZT410 RFID打印机:从基础连接到中文打印实战 斑马ZT410 RFID打印机在物流、零售和资产管理领域应用广泛,但许多开发者仍停留在手动拼接ZPL指令的原始阶段。这种工作方式不仅效率低下,还容易因指令格式错误导致打印失败或RFID写入…...
Qt加载OBJ或STL模型文件,支持鼠标移动、缩放、旋转Demo
Qt加载模型文件obj或者stl实例,支持鼠标移动缩放旋转demo最近在捣鼓Qt的3D可视化功能,发现用Qt搞个模型查看器比想象中简单。咱们先整点实际的——做个能加载obj/stl模型,支持鼠标拖拽旋转、平移、缩放的demo。废话不多说,直接撸代…...
论文省心了!盘点2026年全网爆红的的降AI率平台
轻松降低论文AI率在2026年已不再是天方夜谭。2026年降AI率平台横空出世,实测提速效果炸裂,覆盖AI痕迹消除、文本改写润色、降重优化、学术合规检测四大核心场景,高效搞定毕业论文难题。 一、全流程王者:一站式搞定论文全链路 这类…...
STM32智能车库管理系统设计与实现
基于STM32的智能车库管理系统设计与实现 1. 项目概述 1.1 系统架构 本系统采用双MCU架构设计,主控制器采用STM32系列单片机,负责传感器数据采集、本地显示和报警控制;网络通信模块采用ESP8266 WiFi模块,实现数据上传至云平台。系…...
使用 Aspen Plus 模拟天然气的自热转化
使用aspen plus模拟天然气的自热转化自热重整工艺消耗蒸汽和氧气,将天然气转化为合成气。 事实上,自热转化工艺是放热的部分氧化(POX)工艺和内热的蒸汽甲烷转化(SMR)工艺的结合,从热力学角度中和…...

