【C语言】字符与字符串---从入门到入土级详解
🦄个人主页:修修修也
🎏所属专栏:C语言
⚙️操作环境:Visual Studio 2022

目录
一.字符类型和字符数组(串)简介
1.ASCII
2.定义,初始化,使用
1>字符的定义及初始化
2>字符串的定义及初始化
二.字符
1.字符的输入与输出
2.常见字符操作函数
1>字符大小写转换
2>字符类型判断
三.字符串
1.字符串的输入与输出
2.常见字符串操作函数
1>字符串拷贝
2>字符串长度
3>字符串比较
4>字符串连接与分割
5>字符串搜索与定位
一.字符类型和字符数组(串)简介
1.ASCII
🌱先来看看百度百科对ASCII的定义:
🌱而ASCII的产生原因是:
在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。
🌱ASCII的内容:
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";实际如上字符串在内存中的存储方式是:
该字符数组的末尾位置的字符\0是空字符,C语言用它标记字符串的结束。空字符不是数字0,它是非打印字符,其ASCII码值是(或等价于)0。C中的字符串一定以空字符结束,这意味着数组的容量必须至少比待存储字符串中的字符数多1。否则如果因为容量不够漏存了\0,将会导致系统出现一些bug。如下bug就是因为数组长度不够存储\0导致的:
因为C语言大多数的库函数在处理字符串时都会默认将\0作为字符串的结尾,如我们后面会提到的:strlen()函数(字符串长度计算函数),strcpy()函数(字符串拷贝函数)等大多都是以识别出\0来作为程序的结束标志,因此对于字符串来说,\0的存在至关重要。但是我们在定义和初始化字符串时,却不用特意在字符串的末尾安放\0,因为当字符数组容量允许时,计算机会默认帮助我们在末尾添上\0的。而在这点上字符串常量也是同理,如:
可以看到,打印的结果没有出现之前的bug现象,因此即便是字符常量,计算机也会默认帮助我们在结尾添上\0。
二.字符
1.字符的输入与输出
字符的输入常用:scanf()函数
getchar()函数
字符的输出常用:printf()函数
putchar()函数
2.常见字符操作函数
1>字符大小写转换
方法一:使用 `toupper` 和 `tolower` 函数,这两个函数分别将字符转换为大写和小写形式。
方法二:使用字母的ASCII码值特性,给大写字母+32转换成小写字母,给小写字母-32转换成大写字母。
方法三:使用位运算,将字符的 ASCII 码与 32(二进制为 0b00100000)进行按位异或运算,即可将小写字母转换为大写字母,反之亦然。例如,`'a' ^ 32` 的结果为 `'A'`,`'A' ^ 32` 的结果为 `'a'`。如:
有关大小写字母的三种转换方式有感兴趣的朋友可以移步我的这篇博客:【C语言】字母转换大小写的三种方法
https://blog.csdn.net/weixin_72357342/article/details/130932158?spm=1001.2014.3001.5502
里面有非常详细的toupper()函数和tolower()函数的参数解读及使用详解同时还包含方法二和方法三的具体实现步骤。因此这篇博客中对该部分内容就不赘述了。
2>字符类型判断
方法一:库函数判断
字符类型判断相关库函数
序号 函数名 函数作用 1 isdigit() 判断字符是否为数字 2 isalpha() 判断字符是否为字母 3 isalnum() 判断字符是否为数字或字母 4 isspace() 判断字符是否为空格字符 5 isupper()和 islower() 分别用于判断字符是否为大写字母和小写字母 6 iscntrl() 判断字符是否为控制字符 7 isprint() 判断字符是否为可打印字符 8 ispunct() 判断字符是否为标点符号
方法二:使用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语言】字符类型判断的三种方式
https://blog.csdn.net/weixin_72357342/article/details/130956167?spm=1001.2014.3001.5501
里面有非常详细的C语言字符判断库函数详解及其使用,同时还包含方法二和方法三的具体实现步骤。因此这篇博客中对该部分内容就不赘述了,有兴趣的可以去看看。
三.字符串
1.字符串的输入与输出
字符串的输入常用scanf()函数,gets()函数,fgets()函数:
字符串的输出常用printf()函数,puts()函数,fputs()函数:
2.常见字符串操作函数
1>字符串拷贝
strcpy()函数
函数详解见文末文章
strncpy()函数
2>字符串长度
strlen()函数
函数详解见文末文章
3>字符串比较
strcmp()函数
strncmp()函数
4>字符串连接与分割
字符串连接:
strcat()函数
strncat()函数
字符串分割:
strtok()函数
5>字符串搜索与定位
strchr()函数
strrchr()函数
strstr()函数
结语
希望这篇关于字符与字符串的博客能对大家有所帮助,欢迎大佬们留言或私信与我交流.
学海漫浩浩,我亦苦作舟!关注我,大家一起学习,一起进步!
相关文章推荐
【C语言】strlen()函数
【C语言】strcpy()函数
C语言字符串库函数思维导图:
相关文章:
【C语言】字符与字符串---从入门到入土级详解
🦄个人主页:修修修也 🎏所属专栏:C语言 ⚙️操作环境:Visual Studio 2022 目录 一.字符类型和字符数组(串)简介 1.ASCII 2.定义,初始化,使用 1>字符的定义及初始化 2>字符串的定义及初始化 二.…...
Github Copilot 工具,无需账号,一键激活
① 无需账号,100%认证成功!0风险,可联网可更新,,支持copilot版本升级,支持chat ② 支持windows、mac、linux系统等设备 ③一号通用,支持所有IDE(AppCode,CLion,DataGrip,GoLand,IntelliJ IDEA …...
node: -max-old-space-size=xxx is not allowed in NODE_OPTIONS
问题描述 在启动node项目时,出现了OOM参照网上的处理方案,设置了环境变量: export NODE_OPTIONS"–max-old-space-size8192"当再次通过npm run docs:dev运行node项目的时候出现了如下错误: node: -max-old-space-siz…...
k8s编排系统
Kubernetes(简称K8s)是一个开源的容器编排系统,由Google基于其内部的Borg项目开发,并于2014年正式对外发布。目前,Kubernetes已成为云原生计算基金会(Cloud Native Computing Foundation, CNCF)…...
samba服务器的配置
需求:在Linux上搭建一个文件共享服务,创建不同的账号给予不同的权限,在windows可以直接访问该共享目录 介绍 Samba 是一个强大的工具,使得不同操作系统之间可以无缝地共享文件和资源,促进了跨平台环境下的协作和通信…...
H12-821_279
279.第三类LSA的Link ID是: A.所描述的ABR的Router ID B.所在网段上DR的端口IP地址 C.所描述的目的网段 D.生成这条LSA的路由器的Router ID 答案:C 注释: OSPF的LSA可以单独描述网络信息、拓扑信息,也可以同时描述网络信息和拓扑信息。 LSA3…...
Stable Diffusion科普文章【附升级gpt4.0秘笈】
随着人工智能技术的飞速发展,我们越来越多地看到计算机生成的艺术作品出现在我们的生活中。其中,Stable Diffusion作为一种创新的图像生成技术,正在引领一场艺术创作的革命。本文将为您科普Stable Diffusion的相关知识,带您走进这…...
Lua 如何在Lua中调用C/C++函数
Lua调用C函数有两种方式 程序主体在C中运行,C函数注册到Lua中。C调用Lua,Lua调用C注册的函数,C或者Lua得到函数的执行结果。程序主体在Lua中运行,C函数作为库函数供Lua使用。 C的代码如下 如何在Lua脚本中调用这个C语言函数(ad…...
JVM学习-类加载
目录 1.类文件结构 2.类加载器 3.类加载的三个阶段 3.1加载 3.2链接 3.2.1验证 3.2.2准备阶段 3.2.3解析阶段 3.3初始化 4.拓展:反射 4.1获取类对象 4.2创建实例 4.3获取方法 4.4方法调用 1.类文件结构 2.类加载器 类加载器用来将类文件的二进制字节码加载到JV…...
PyCharm中如何使用不同的虚拟环境
1. 简介 有些项目用老的运行环境,而有些项目用新的运行环境,那么我们在运行这些代码(比如跑对比实验的时候)如何进行切换呢,这时候就可以使用虚拟环境啦 2. 虚拟环境的创建 首先启动Anaconda Prompt 并在其中执行如…...
Unity Live Capture 中实现面部捕捉同步模型动画
Unity Face Capture 是一个强大的工具,可以帮助你快速轻松地将真实人脸表情捕捉到数字模型中。在本文中,我们将介绍如何在 Unity Face Capture 中实现面部捕捉同步模型动画。 安装 |实时捕获 |4.0.0 (unity3d.com) 安装软件插件 安装 Live Capture 软件…...
Codeforces Round 932(div2)||ABD
A-Entertainment in MAC 题意 可以对一个字符串进行两种操作: 将字符串反转将该字符串反转后接在原串的后面。 可以进行任意次上述操作,获得字典序最小的字符串。 数据范围 t ( 1 ≤ t ≤ 500 ) t(1≤t≤500) t(1≤t≤500) n ( 2 ≤ n ≤ 1 0 9 ) n…...
基于最小二乘法的太阳黑子活动模型参数辨识和预测matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于最小二乘法的太阳黑子活动模型参数辨识和预测matlab仿真。太阳黑子是人们最早发现也是人们最熟悉的一种太阳表面活动。因为太阳内部磁场发生变化,…...
VSCode配置cuda C++编程代码提示的详细步骤
目录 VSCode配置cuda C++编程代码提示的详细步骤: 1、cuda编译环境的安装:...
JUnit 面试题及答案整理,最新面试题
JUnit中的断言(Assert)有哪些类型? JUnit提供了多种断言类型来帮助测试代码的正确性。常见的断言类型包括: 1、assertEquals: 用于检查两个值是否相等。如果不相等,测试失败。 2、assertTrue和assertFal…...
使用Lua编写Wireshark解析ProtoBuf插件
文章目录 Wireshark Protobuf Lua-dissectorStep 1: 获取 WiresharkStep 2: 配置ProtoBuf相关设置添加ProtoBuf查找路径 Step 3 运行和调试Lua代码1. 添加Lua脚本2. 运行和调试 Step 4: 写Lua Dissector代码 :)Step 5(Optional): Decode AsGithub工程地址 Wireshark Protobuf L…...
ClickHouse副本节点数据损坏恢复
参考链接:https://blog.csdn.net/qq_42082701/article/details/127771766 参考链接:https://kb.altinity.com/altinity-kb-setup-and-maintenance/suspiciously-many-broken-parts/ # 背景CK配置为1分片2副本# 配置参数,这里我们将max_suspicious_brok…...
YOLOv9改进策略:注意力机制 | SimAM(无参Attention),效果秒杀CBAM、SE
💡💡💡本文改进内容:SimAM是一种轻量级的自注意力机制,其网络结构与Transformer类似,但是在计算注意力权重时使用的是线性层而不是点积 yolov9-c-CoordAtt summary: 972 layers, 51024476 parameters, 510…...
宝塔 安装对外服务Tomcat和JDK
一、安装Tomcat\JDK 切记1:如果选择下载节点失败,请到软件商城安装 。 切记2:提醒安装Nginx或Apache ,先点安装,进入再打叉关闭。因为Tomcat服务足够为我们搭建JavaWeb网站服务了。 切记3:Nginx占用80端口…...
rust最新版本安装-提高下载速度
1)拉取依赖包将安装脚本输出到本地rust.sh脚本中 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs > rust.sh 2)更新rust.sh脚本内容、修改源 # 编辑rust.sh vi rust.sh # 将RUSTUP_UPDATE_ROOT的值替换为: RUSTUP_UPDATE_ROOT&q…...
FreeCache内存管理终极指南:零GC开销的预分配机制详解
FreeCache内存管理终极指南:零GC开销的预分配机制详解 【免费下载链接】freecache A cache library for Go with zero GC overhead. 项目地址: https://gitcode.com/gh_mirrors/fr/freecache 在Go语言开发中,内存管理和垃圾回收(GC&am…...
【深度长文】一篇讲清 Kubernetes 控制平面架构,四个组件如何协同
引言 很多人第一次接触 Kubernetes,记住的是一串组件名称:API Server、etcd、Scheduler、Controller Manager、kubelet。再往后一些,会知道 Deployment 管副本,Scheduler 管调度,Operator 能做自动化运维。但如果继续…...
OpenClaw镜像体验:在星图GPU平台快速试用SecGPT-14B安全分析
OpenClaw镜像体验:在星图GPU平台快速试用SecGPT-14B安全分析 1. 为什么选择云平台体验OpenClaw 第一次接触OpenClaw时,我被它的自动化能力吸引,但本地安装过程让我望而却步。作为一个经常需要评估各种AI工具的安全工程师,我发现…...
OBS模糊插件终极指南:如何用obs-composite-blur提升直播画面专业度
OBS模糊插件终极指南:如何用obs-composite-blur提升直播画面专业度 【免费下载链接】obs-composite-blur A comprehensive blur plugin for OBS that provides several different blur algorithms, and proper compositing. 项目地址: https://gitcode.com/gh_mir…...
像素语言·维度裂变器效果展示:看AI如何把普通句子变高级
像素语言维度裂变器效果展示:看AI如何把普通句子变高级 1. 引言:当文字遇见像素魔法 在数字创作的世界里,文字是最基础的"像素"。但如何让这些文字像素焕发出更绚丽的光彩?像素语言维度裂变器(Pixel Dimension Fissio…...
Qwen2.5-VL视觉定位效果展示:Ollama输出坐标+置信度+层级关系JSON
Qwen2.5-VL视觉定位效果展示:Ollama输出坐标置信度层级关系JSON 最近在玩一个挺有意思的AI模型——Qwen2.5-VL-7B-Instruct。这可不是普通的聊天机器人,它是一个能“看懂”图片,还能把看到的东西用结构化数据告诉你的视觉多模态模型。 简单…...
远程工作事故树:一次误删库引发的跨国追责
远程协作下的“脆弱”系统深夜,伦敦办公室的数据库工程师在连续工作十二小时后,敲下了一条他以为指向“测试环境”的删除命令。与此同时,上海的测试团队正在为次日的上线进行最后一轮回归验证。六小时后,当阳光照进浦东的办公室&a…...
编译期AI推理成为可能?C++27 constexpr增强深度解析,含Clang 19/MSVC 17.10实测基准数据,立即升级避坑指南
第一章:C27 constexpr函数增强的演进脉络与核心动机C27 对 constexpr 函数的扩展并非孤立演进,而是对自 C11 引入 constexpr、经 C14 放宽语义、C17 支持 if/switch 和局部变量、C20 引入 constexpr new/allocator 与虚拟函数等关键里程碑的系统性收敛与…...
Qwen3-ForcedAligner-0.6B在美赛中的应用:跨语言访谈数据分析
Qwen3-ForcedAligner-0.6B在美赛中的应用:跨语言访谈数据分析 1. 引言 在美国大学生数学建模竞赛(MCM/ICM)中,参赛队伍经常面临一个棘手问题:如何高效处理来自不同国家、不同语言的学术访谈数据?传统方法…...
【bilibili-downloader】:突破4K画质限制的B站视频下载工具:给视频收藏爱好者的高效解决方案
【bilibili-downloader】:突破4K画质限制的B站视频下载工具:给视频收藏爱好者的高效解决方案 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/…...








putchar()函数













