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

C语言中大小写字母的转化

目录

C语言中大小写字母的转化

一、引言

二、C语言中的大小写转换函数

toupper()函数

tolower()函数

三、注意事项

四、总结


C语言中大小写字母的转化

一、引言

在C语言编程中,字符的处理是一个重要的环节。字符包括字母、数字、标点符号等,其中字母又分为大写和小写。在某些应用场景中,我们需要对字母的大小写进行转换,比如用户输入的密码需要全部转换为大写或小写以确保安全,或者在进行字符串比较时,需要忽略大小写以实现不区分大小写的匹配。

C语言标准库中提供了用于大小写转换的函数,使得这一操作变得简单而高效。本文将详细介绍如何在C语言中进行大小写字母的转换,包括相关的函数和示例代码。

二、C语言中的大小写转换函数

toupper()函数

toupper()函数是C语言标准库中的一个函数,用于将小写字母转换为大写字母。

其函数原型:int toupper(int c);

toupper()函数接受一个整数参数c,表示要转换的字符。如果c是一个小写字母,则函数返回对应的大写字母;如果c不是小写字母,则函数返回c`本身。返回值是一个整数,表示转换后的字符。

示例代码:

#include <stdio.h> 
#include <ctype.h> int main() { char str[] = "Hello, World!"; int i = 0; while (str[i]) { str[i] = toupper(str[i]); i++; } printf("%s\n", str); // 输出:HELLO, WORLD! return 0; 
}


tolower()函数

tolower()函数与toupper()函数类似,用于将大写字母转换为小写字母。

其函数原型:int tolower(int c);

tolower()函数接受一个整数参数c,表示要转换的字符。如果c是一个大写字母,则函数返回对应的小写字母;如果c不是大写字母,则函数返回c`本身。返回值是一个整数,表示转换后的字符。

示例代码:

#include <stdio.h> 
#include <ctype.h> int main() { char str[] = "HELLO, WORLD!"; int i = 0; while (str[i]) { str[i] = tolower(str[i]); i++; } printf("%s\n", str); // 输出:hello, world! return 0; 
}

 

三、注意事项

在使用toupper()tolower()函数时,需要注意以下几点:

  1. 函数参数是字符的ASCII码值,因此既可以传递字符变量,也可以传递字符常量。
  2. 如果传递给函数的参数不是字母,则函数将返回该参数本身。这意味着这两个函数不会对非字母字符产生任何影响。
  3. 由于toupper()tolower()函数是C语言标准库中的函数,因此在使用它们之前需要包含头文件<ctype.h>

除了toupper()tolower()函数外,C语言标准库中还提供了其他一些用于字符和字符串处理的函数,但并没有直接提供类似Python中title()这样的函数来将每个单词的首字母转换为大写。不过,我们可以通过组合使用C语言中的函数和循环结构来实现类似的功能。

下面是一个简单的示例,展示了如何使用C语言将字符串中每个单词的首字母转换为大写:

#include <stdio.h>  
#include <ctype.h>  
#include <string.h>  
#include <stdbool.h>  void toTitleCase(char *str) {  bool nextUpper = true; // 标记下一个字符是否为大写  for (int i = 0; str[i] != '\0'; i++) {  // 如果是空格,则下一个字符应该是大写  if (str[i] == ' ') {  nextUpper = true;  } else if (isalpha(str[i])) {  // 如果是字母且需要转换为大写,则使用toupper()  if (nextUpper) {  str[i] = toupper(str[i]);  nextUpper = false; // 设置下一个字符不需要转换为大写  }  }  }  
}  int main() {  char str[] = "hello, world!";  toTitleCase(str);  printf("%s\n", str); // 输出:Hello, World!  return 0;  
}

再来实现一个大小写互换的函数 swapCase(),遍历输入字符串中的每个字符,检查它是否是一个字母,然后使用toupper()tolower()函数来转换它的大小写。

#include <stdio.h>  
#include <ctype.h>  
#include <string.h>  void swapCase(char *str) {  for (int i = 0; str[i] != '\0'; i++) {  if (isalpha(str[i])) { // 检查字符是否为字母  str[i] = isupper(str[i]) ? tolower(str[i]) : toupper(str[i]);  // 如果是大写字母,转换为小写;如果是小写字母,转换为大写  }  }  
}  int main() {  char str[] = "Hello, World!";  printf("Original string: %s\n", str);  swapCase(str);  printf("Swapped case string: %s\n", str);  return 0;  
}

在这个swapCase函数中,我们使用isalpha()函数来检查每个字符是否为字母。如果是字母,我们再用isupper()函数来检查它是否为大写字母。如果是大写字母,我们就用tolower()函数将其转换为小写;如果是小写字母,我们就用toupper()函数将其转换为大写。这样,我们就实现了大小写字母的互换。

当你运行上面的程序时,它会输出原始字符串和大小写互换后的字符串。在这个例子中,原始字符串"Hello, World!"会被转换为"hELLO, wORLD!"

请注意,这个函数会直接修改传入的字符串,因此如果你不想修改原始字符串,你需要先复制一份字符串,然后对复制后的字符串进行操作。此外,这个函数假设输入字符串是有效的,并且不包含任何非字母字符。在实际应用中,你可能需要添加额外的错误检查和处理逻辑来确保函数的健壮性。

四、总结

本文介绍了在C语言中进行大小写字母转换的方法,包括使用toupper()tolower()函数。这两个函数简单易用,可以帮助我们快速实现大小写转换的需求。在实际编程中,我们可以根据具体的需求选择使用哪个函数,以实现大小写字母的灵活处理。

除了大小写转换,C语言还提供了其他丰富的字符处理函数,如isdigit()用于判断字符是否为数字,isalpha()用于判断字符是否为字母等。这些函数为字符处理提供了强大的支持,使得C语言在字符串和文本处理方面具有很高的灵活性和效率。

掌握这些字符处理函数,对于提升C语言编程能力具有重要意义。希望本文能够帮助读者更好地理解和应用C语言中的大小写转换函数,为实际编程工作提供便利。

相关文章:

C语言中大小写字母的转化

目录 C语言中大小写字母的转化 一、引言 二、C语言中的大小写转换函数 toupper()函数 tolower()函数 三、注意事项 四、总结 C语言中大小写字母的转化 一、引言 在C语言编程中&#xff0c;字符的处理是一个重要的环节。字符包括字母、数字、标点符号等&#xff0c;其中…...

Camunda7.18流程引擎启动出现Table ‘camunda_platform_docker.ACT_GE_PROPERTY‘的解决方案

文章目录 1、问题描述2、原因分析3、解决方案3.1、方案一&#xff1a;降低mysql版本3.2、方案二&#xff1a;增加nullCatalogMeansCurrent参数&#xff08;推荐&#xff09; 4、总结 1、问题描述 需要在docker中&#xff0c;部署Camunda流程引擎。通过启动脚本camunda-platfor…...

红队打靶:DR4G0N B4LL打靶思路详解(vulnhub)

目录 写在开头 第一步&#xff1a;主机发现 第二步&#xff1a;Web渗透 第三步&#xff1a;curl批量访问&#xff08;无果&#xff09; 第四步&#xff1a;Vulnhub目录发现 第五步&#xff1a; 图片隐写破解 第六步&#xff1a;ssh私钥登录 第七步&#xff1a;变量劫持提…...

SQL Server添加用户登录

我们可以模拟一下让这个数据库可以给其它人使用 1、在计算机中添加一个新用户TeacherWang 2、在Sql Server中添加该计算机用户的登录权限 exec sp_grantlogin LAPTOP-61GDB2Q7\TeacherWang -- 之后这个计算机用户也可以登录数据库了 3、添加数据库的登录用户和密码&#xff0…...

pytest如何在类的方法之间共享变量?

在pytest中&#xff0c;setup_class是一个特殊的方法&#xff0c;它用于在类级别的测试开始之前设置一些初始化的状态。这个方法会在类中的任何测试方法执行之前只运行一次。 当你在setup_class中使用self来修改类属性时&#xff0c;你实际上是在修改类的一个实例属性。在Pyth…...

配置前端项目到 github-pages

Quickstart for GitHub Pages - GitHub Docs...

VSCode使用教程

文章目录 VSCode简介VSCode下载安装配置语言环境CJavaPython VSCode偏好配置中文配置界面颜色字体大小快捷键 个人常规喜好 VSCode简介 VSCode&#xff08;全称&#xff1a;Visual Studio Code&#xff09;是一款由微软开发且跨平台的免费源代码编辑器。该软件支持语法高亮、代…...

vscode——本地配置(C和C++环境配置)(2)

vscode——本地配置&#xff08;2&#xff09; 配置C语言编译看看.json文件编译多个C文件C/C调试 今天我们继续来看vscode的配置&#xff0c;如果没看过上一次的文章&#xff0c;大家可以点击&#xff1a; https://blog.csdn.net/qq_67693066/article/details/136315696 配置C语…...

【从零开始学习重要知识点 | 第一篇】快速了解什么是幂等性以及常见解决方案

前言&#xff1a; 当我们在设计和实现分布式系统时&#xff0c;幂等性是一个非常重要的概念。幂等性可以简单地理解为&#xff1a;对于同一操作&#xff0c;不论执行多少次&#xff0c;产生的影响都是相同的。这个概念在分布式系统中非常重要&#xff0c;因为在这种环境下&…...

Jvm之内存泄漏

1 内存溢出 1.1 概念 java.lang.OutOfMemoryError&#xff0c;是指程序在申请内存时&#xff0c;没有足够的内存空间供其使用&#xff0c;出现OutOfMemoryError。产生该错误的原因主要包括&#xff1a;JVM内存过小。程序不严密&#xff0c;产生了过多的垃圾。 程序体现: 内…...

尚硅谷webpack5笔记2

Loader 原理 loader 概念 帮助 webpack 将不同类型的文件转换为 webpack 可识别的模块。 loader 执行顺序 分类pre: 前置 loadernormal: 普通 loaderinline: 内联 loaderpost: 后置 loader执行顺序4 类 loader 的执行优级为:pre > normal > inline > post 。相…...

笔记本Win 10系统查看电池健康状况

博主最近换了个笔记本电池&#xff0c;之前的电池容量明显变小了很多&#xff0c;而且出现了轻微鼓包的情况。所以用gpt问了一下怎么用系统的方法查看电池情况。 在Windows 10系统中&#xff0c;您可以通过以下步骤来查看笔记本电脑电池的健康状况&#xff1a; 打开命令提示符&…...

算法--动态规划(线性DP、区间DP)

这里写目录标题 tip数组下标从0开始还是从1开始 数学三角形介绍算法思想例题代码 最长上升子序列介绍算法思想例题代码 最长公共子序列介绍算法思想例题代码 tip 数组下标从0开始还是从1开始 如果代码中涉及到数组下标为i-1&#xff08;有时候哪怕不是同一个数组也符合情况&am…...

【ArcGIS】统计格网中不同土地利用类型占比

基于ArcGIS统计格网中不同土地利用类型占比 数据准备ArcGIS操作步骤1、创建渔网&#xff08;Create Fishnet&#xff09;2、建立唯一标识3、选择格网4、提取不同类别土地利用类型5、各类用地面积计算 参考另&#xff1a;可能出现的问题总结Q1&#xff1a;ArcGIS获取唯一值&…...

算法竞赛实用板子

一、声明 自用版参考acwing&#xff0c;致力于实用、好用&#xff0c;板子中有个人理解&#xff0c;持续更新。 二、开板 1.快排 void quick_sort(int q[],int l,int r) {if(l>r)return; //出口int il-1,jr1,xq[lr>>1]; //分治方法while(i<j){do i;w…...

RPA中国 x UiPath | 第六届RPA极客挑战赛,3月16日上海开赛!

随着人工智能技术的不断进步以及数字化转型的深入&#xff0c;企业对于高效、精准、自动化的业务流程需求日益迫切。RPA技术作为连接人类工作与机器操作的桥梁&#xff0c;正逐渐从规则驱动发展为智能决策的助手。 由RPA中国联合UiPath共同主办的【第六届RPA极客挑战赛】将于2…...

算法打卡day5|哈希表篇01|Leetcode 242.有效的字母异位词 、19.删除链表的倒数第N个节点、202. 快乐数、1. 两数之和

哈希表基础知识 哈希表 哈希表关键码就是数组的索引下标&#xff0c;然后通过下标直接访问数组中的元素&#xff1b;数组就是哈希表的一种 一般哈希表都是用来快速判断一个元素是否出现集合里。例如要查询一个名字是否在班级里&#xff1a; 要枚举的话时间复杂度是O(n)&…...

『python爬虫』xpath变化导致无法找到指定元素(持续更新中~)

目录 xpath变化的原因1. 语言设置2. 窗口大小n. 待添加~总结 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 xpath变化的原因 XPath 可能会出现变化的原因有很多&#xff0c;以下是一些常见的情况&#xff1a; 网页…...

人大金仓数据库Kingbase服务SQL基础操作手册

1 kingbase服务 1.1 查看kingbase数据库服务进程 ps -ef|grep kingbase1.2 命令启动kingbase数据库服务 # /opt/Kingbase/ES/V8 为金仓安装目录 # /opt/Kingbase/ES/V8/data 为金仓数据目录 # sys_ctl是数据库服务器启停命令&#xff0c;通过-D选项来来指定数据库数据目录 #…...

赎金信00

题目链接 赎金信 题目描述 注意点 magazine中的每个字符只能在ransomNote中使用一次ransomNote和magazine由小写英文字母组成 解答思路 因为ransomNote和magazine由小写英文字母组成&#xff0c;所以使用大小为26的数组存储magazine中a~z对应出现的次数&#xff0c;ransom…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...