【C语言】字符与字符串---从入门到入土级详解

🦄个人主页:修修修也

🎏所属专栏:C语言

⚙️操作环境:Visual Studio 2022


目录

一.字符类型和字符数组(串)简介

1.ASCII

2.定义,初始化,使用

1>字符的定义及初始化

2>字符串的定义及初始化

二.字符

1.字符的输入与输出

2.常见字符操作函数

   1>字符大小写转换

   2>字符类型判断

三.字符串

1.字符串的输入与输出

2.常见字符串操作函数

1>字符串拷贝

2>字符串长度

3>字符串比较

4>字符串连接与分割

5>字符串搜索与定位


一.字符类型和字符数组(串)简介

1.ASCII

🌱先来看看百度百科对ASCII的定义d3df34cb0b4a4d76bd40712577624c44.png

🌱而ASCII的产生原因是:      

        在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。

🌱ASCII的内容:ec32c720fb3144b0bc80c82dbcfcc9a5.png


2.定义,初始化,使用

1>字符的定义及初始化

        因为计算机使用数字编码来处理字符,即用特定的整数表示特定的字符。我们最常用的编码就是ASCII编码。我们先定义一个名叫ch的字符变量,再给它赋值为’A‘,如:

char ch;
ch='A';

         在C语言中,用单引号括起来的单个字符被称为字符常量。编译器一发现’A‘,就会将其转换成相应的代码值。因此字符数据的初始化中,单引号必不可少。

        实际上,字符是以数值形式储存的,所以也可以使用数字代码值来赋值,如:

char ch=65;

        因为虽然65是int类型,但是它在char类型能表示的范围内,所以将其赋值给ch没问题。


2>字符串的定义及初始化

        字符串是一个或多个字符的序列,如下所示:

"Hello world"

        注意,双引号不是字符串的一部分。双引号仅告知编译器它括起来的是字符串,正如单引号用于标识单个字符一样。

char arr[15]="Hello world";

        实际如上字符串在内存中的存储方式是:

112e0936e7e449f0a540620019cb6ea1.png

        该字符数组的末尾位置的字符\0是空字符,C语言用它标记字符串的结束。空字符不是数字0,它是非打印字符,其ASCII码值是(或等价于)0。C中的字符串一定以空字符结束,这意味着数组的容量必须至少比待存储字符串中的字符数多1。否则如果因为容量不够漏存了\0,将会导致系统出现一些bug。如下bug就是因为数组长度不够存储\0导致的:

f48fcf8c6bbf4c32b9c35b3fba801170.png

        因为C语言大多数的库函数在处理字符串时都会默认将\0作为字符串的结尾,如我们后面会提到的:strlen()函数(字符串长度计算函数),strcpy()函数(字符串拷贝函数)等大多都是以识别出\0来作为程序的结束标志,因此对于字符串来说,\0的存在至关重要。但是我们在定义和初始化字符串时,却不用特意在字符串的末尾安放\0,因为当字符数组容量允许时,计算机会默认帮助我们在末尾添上\0的。而在这点上字符串常量也是同理,如:

b9c1cb7e7a9a46ce85e2bb156888ee3f.png

         可以看到,打印的结果没有出现之前的bug现象,因此即便是字符常量,计算机也会默认帮助我们在结尾添上\0。


二.字符

1.字符的输入与输出

字符的输入常用:scanf()函数

getchar()函数2a6e76ca025a4bca90bf7be8930e5979.png

字符的输出常用:printf()函数

putchar()函数b3ecac927b544339a19b16bc411f9e1c.png


2.常见字符操作函数

   1>字符大小写转换

        方法一:使用 `toupper` 和 `tolower` 函数,这两个函数分别将字符转换为大写和小写形式。

        方法二:使用字母的ASCII码值特性,给大写字母+32转换成小写字母,给小写字母-32转换成大写字母。

        方法三:使用位运算,将字符的 ASCII 码与 32(二进制为 0b00100000)进行按位异或运算,即可将小写字母转换为大写字母,反之亦然。例如,`'a' ^ 32` 的结果为 `'A'`,`'A' ^ 32` 的结果为 `'a'`。如:cc90aa3c7fd04316bd0a51f38d5770ea.png

        有关大小写字母的三种转换方式有感兴趣的朋友可以移步我的这篇博客:【C语言】字母转换大小写的三种方法icon-default.png?t=N7T8https://blog.csdn.net/weixin_72357342/article/details/130932158?spm=1001.2014.3001.5502

        里面有非常详细的toupper()函数和tolower()函数的参数解读及使用详解同时还包含方法二和方法三的具体实现步骤。因此这篇博客中对该部分内容就不赘述了。


2>字符类型判断

方法一:库函数判断

字符类型判断相关库函数

序号函数名函数作用
1        isdigit()判断字符是否为数字
2isalpha()判断字符是否为字母
3isalnum()判断字符是否为数字或字母
4isspace()判断字符是否为空格字符
5isupper()和 islower()分别用于判断字符是否为大写字母和小写字母
6iscntrl()判断字符是否为控制字符
7isprint()判断字符是否为可打印字符
8ispunct()判断字符是否为标点符号

方法二:使用ASCII数值区间或字符区间判断,如:

char ch='c';
int letter=0;
if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))
            letter++;

上述代码就是使用字符区间来判断的例子。

方法三:当然我们也可以直接使用ASCII码值来进行判断,如:

char ch='s';
int letter=0;
if((ch>=65&&ch<=90)||(ch>=97&&ch<=122))
            letter++;

        有关字符类型的三种判断方式有感兴趣的朋友可以移步我的这篇博客:

【C语言】字符类型判断的三种方式icon-default.png?t=N7T8https://blog.csdn.net/weixin_72357342/article/details/130956167?spm=1001.2014.3001.5501

        里面有非常详细的C语言字符判断库函数详解及其使用,同时还包含方法二和方法三的具体实现步骤。因此这篇博客中对该部分内容就不赘述了,有兴趣的可以去看看。


三.字符串

1.字符串的输入与输出

字符串的输入常用scanf()函数,gets()函数,fgets()函数:76b349d4148c40c78ad4a951643a4fbf.png

字符串的输出常用printf()函数,puts()函数,fputs()函数:0e8d1bf975564c399ddbfa6a3bcf7607.png


2.常见字符串操作函数

1>字符串拷贝

strcpy()函数

函数详解见文末文章

strncpy()函数


2>字符串长度

strlen()函数

函数详解见文末文章


3>字符串比较

strcmp()函数

strncmp()函数


4>字符串连接与分割

字符串连接:

strcat()函数

strncat()函数

字符串分割:

strtok()函数


5>字符串搜索与定位

strchr()函数

strrchr()函数

strstr()函数



结语

希望这篇关于字符与字符串的博客能对大家有所帮助,欢迎大佬们留言或私信与我交流.

学海漫浩浩,我亦苦作舟!关注我,大家一起学习,一起进步!

相关文章推荐

【C语言】strlen()函数

【C语言】strcpy()函数


C语言字符串库函数思维导图:

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

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

相关文章

Linux——信号量

目录 POSIX信号量 信号量原理 信号量概念 信号量函数 基于环形队列的生产者消费者模型 生产者和消费者申请和释放资源 单生产者单消费者 多生产者多消费者 多生产者多消费者的意义 信号量的意义 POSIX信号量 信号量原理 如果仅用一个互斥锁对临界资源进行保护&#…

19.ADC模数转换器知识点+AD单通道AD多通道应用程序示例

0. 江协科技/江科大-STM32标准库开发-各章节详细笔记-查阅传送门_江协科技stm32笔记-CSDN博客文章浏览阅读2.9k次&#xff0c;点赞44次&#xff0c;收藏128次。江协科技/江科大-STM32标准库开发-各章节详细笔记-传送门至各个章节笔记。基本上课程讲的每句都详细记录&#xff0c…

PHP微信朋友圈广告植入源码 – 提供高效的广告植入解决方案,助力微信朋友圈广告推广

内容介绍 管理后台 可以无限制帮用户开户&#xff0c;也可以理解为多用户版。 可以管理用户发布文章条数&#xff0c;也可以无限制发布。 前端用户 用户可以上传多个广告&#xff0c;每个广告分别进行统计展示及点击。 用户一键植入&#xff0c;不用粘贴网址&#xff0c;每篇…

Spring Security自定义认证授权过滤器

自定义认证授权过滤器 自定义认证授权过滤器1、SpringSecurity内置认证流程2、自定义Security认证过滤器2.1 自定义认证过滤器2.2 定义获取用户详情服务bean2.3 定义SecurityConfig类2.4 自定义认证流程测试 3、 基于JWT实现无状态认证3.1 认证成功响应JWT实现3.2 SpringSecuri…

从大厂到高校,鸿蒙人才“红透半边天”!

截至目前&#xff0c;继清华大学、北京航空航天大学、武汉大学等985高校开设鸿蒙相关课程后&#xff0c;已经或将要开设鸿蒙相关课程的985、211高校达到近百所&#xff0c;为鸿蒙人才培养提供沃土。 随着鸿蒙系统即将摒弃安卓&#xff0c;鸿蒙原生应用将全面启动的背景下&…

4款实用性前端动画特效分享(附在线演示)

分享4款非常不错的项目动画特效 其中有jQuery特效、canvas特效、CSS动画等等 下方效果图可能不是特别的生动 那么你可以点击在线预览进行查看相应的动画特效 同时也是可以下载该资源的 全屏图片视差旋转切换特效 基于anime.js制作全屏响应式的图片元素布局&#xff0c;通过左…

javaweb学习(day09-Web开发会话技术)

一、会话 1 基本介绍 1.1 什么是会话&#xff1f; 会话可简单理解为&#xff1a;用户开一个浏览器&#xff0c;点击多个超链接&#xff0c;访问服务器多个 web 资源&#xff0c;然 后关闭浏览器&#xff0c;整个过程称之为一个会话。 1.2 会话过程中要解决的一些问题&#…

[LVGL]:MACOS下使用LVGL模拟器

如何在MACOS下使用lvgl模拟器 1.安装必要环境 brew install sdl2查看sdl2安装位置&#xff1a; (base) ➜ ~ brew list sdl2 /opt/homebrew/Cellar/sdl2/2.30.1/bin/sdl2-config /opt/homebrew/Cellar/sdl2/2.30.1/include/SDL2/ (78 files) /opt/homebrew/Cellar/sdl2/2.3…

权威发布!艾媒咨询最新报告显示65.1%的消费者还在睡硬床

一直以来,“睡硬床好”观念在中国盛行,国民较多青睐硬床,床垫厂商为迎合大众,大批量生产硬床垫。日前,全球新经济产业第三方数据挖掘和分析机构iiMedia Research(艾媒咨询)发布《2024年中国硬床垫使用现状及潜在危害调研》(以下简称:报告),数据显示,75.1%的消费者对“睡硬床对腰…

DM数据库安装及使用(Windows、Linux、docker)

Windows 先解压安装包 点击setup安装 下一步 勾选接受然后下一步 下一步 选择典型安装下一步 下一步 搜索DM数据库配置助手然后一直下一步 然后搜索DM管理工具 登录 登录成功 widows版本安装成功 Linux安装 操作系统CPU数据库CentOS7x86_64 架构dm8_20230418_x86_rh6_64 …

Nacos源码流程图

1.Nacos1.x版本服务注册与发现源码 流程图地址&#xff1a;https://www.processon.com/view/link/634695eb260d7157a7bc6adb 2.Nacos2.x版本服务注册与发现源码 流程图地址&#xff1a;https://www.processon.com/view/link/634695fb260d7157a7bc6ae0 3.Nacos2.x版本GRPC…

【深度学习笔记】10_11 注意力机制

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 10.11 注意力机制 在10.9节&#xff08;编码器—解码器&#xff08;seq2seq&#xff09;&#xff09;里&#xff0c;解码器在各个时间…

Leet code 1658 将x减到0的最小操作数

解题思路&#xff1a;滑动窗口 主要思想&#xff1a;正难逆简 题目需要左找一个数 右找一个数 我们不如直接找中间最长的一连串子数让这串子树和为 数组子树和减去X 找不到就返回 -1 滑动窗口双指针从左端出发&#xff0c;进行 进窗口 判断 出窗口 更新结果四个步骤 代码…

用机床测头为什么能提升加工中心精度?提高生产效率?

制造业的蓬勃发展为企业提出了更高的精度和效率要求。在现代制造业中&#xff0c;机床测头作为一种关键的检测装置&#xff0c;能够实时监控加工过程中的误差&#xff0c;及时调整&#xff0c;保证加工质量的稳定性&#xff0c;提高加工中心的精度&#xff0c;进而提升生产效率…

QT 如何在QPushButton上播放gif(终极版)

在平时浏览网站&#xff0c;或者使用软件的时候&#xff0c;经常可以见到&#xff1a;在点击了某个按钮之后&#xff0c;按钮上会显示动图以及提示文字。在QT中&#xff0c;比较常见且简单的做法就是&#xff1a;给按钮设置一个layout&#xff0c;然后在这个layout里面添加QLab…

openssl3.2 - note - Getting Started with OpenSSL

文章目录 openssl3.2 - note - Getting Started with OpenSSL概述笔记openssl 历史版本Configure 选项开关支持的OSopenssl 文档简介安装新闻每个平台的安装文档支持的命令列表配置文件格式环境变量 END openssl3.2 - note - Getting Started with OpenSSL 概述 看到官方文档…

三款内衣洗衣机的顶级较量:希亦、小吉、由利,谁才是性价比之王?

洗衣机在我们的生活中可谓是非常常见的了&#xff0c;几乎每家每户都具备着一台。即便是有洗衣机&#xff0c;也有不少人不会将自己我贴身衣物直接扔在洗衣机里清洗&#xff0c;而是会自己手工手洗。这跟我们传统上的观念有很大的关系&#xff0c;认为把内衣、内裤等贴身衣物放…

代码随想录算法训练营三刷day24 | 回溯算法 之 理论基础 77. 组合

三刷day24 理论基础77. 组合递归函数的返回值以及参数回溯函数终止条件单层搜索的过程 理论基础 回溯法解决的问题都可以抽象为树形结构。 因为回溯法解决的都是在集合中递归查找子集&#xff0c;集合的大小就构成了树的宽度&#xff0c;递归的深度&#xff0c;都构成的树的深…

【Java 并发】AbstractQueuedSynchronizer

1 AQS 简介 在同步组件的实现中, AQS 是核心部分, 同步组件的实现者通过使用 AQS 提供的模板方法实现同步组件语义。 AQS 则实现了对同步状态的管理, 以及对阻塞线程进行排队, 等待通知等一些底层的实现处理。 AQS 的核心也包括了这些方面: 同步队列, 独占式锁的获取和释放, 共…

2024三掌柜赠书活动第十六期:AI时代Python金融大数据分析实战

目录 前言 AI时代Python金融大数据分析实战 关于《AI时代Python金融大数据分析实战》 编辑推荐 内容简介 作者简介 图书目录 书中前言/序言 《AI时代Python金融大数据分析实战》全书速览 结束语 前言 随着人工智能技术的发展和金融行业的不断进步&#xff0c;大数据分…
最新文章