【C++】string 类---字符判断与大小写转换(超详细解析!)

目录

一、string 类的介绍

二、字符大小写转换与判断常用函数 

💦 字符大小写判断

 ① isalpha()

 ② isalnum()

 ③ isdigit()

 ④ islower()

 ⑤ isupper()

 💦 字符大小写转换

 ① tolower()

✨方法一:

 ✨方法二:

 ② toupper()

 ✨方法一:

 ✨方法二:

三、LeetCode例题使用示范

💦 验证回文串

 💦 检验大写字母

 四、共勉


一、string 类的介绍

       string类 是C++标准库的一个重要的部分,主要用于字符串处理。可以使用输入输出流方式直接进行string操作,也可以通过文件等手段进行string操作。同时,C++的算法库对string类也有着很好的支持,并且string类还和c语言的字符串之间有着良好的接口。

     本节主要是针对 string 类 对字符大小写判断与转换,如果想要详解更多,可以看看这篇文章针对 string 类 的超详细解析:string 类超详细解析

二、字符大小写转换与判断常用函数 

  • 在常用的string类字符操作时,又会经常用到大小写转换以及判断等问题,这时候就可以用相关的函数进行操作,常用的几个转换以及判断函数总结如下:

以下函数的声明在头文件<cctype> 

函数名称功能说明
isalpha()用来判断一个字符是否为字母,如果是字母则返回非零,否则返回零
isalnum()用来判断一个字符是否为字母或数字,也就是说判断一个字符是否属于a~z || A~Z || 0~9
isdigit()用来判断一个字符是否为数字,如果是数字则返回非零,否则返回零
islower()用来判断一个字符是否为小写字母,也就是是否属于a~z
isupper()和islower()相反,用来判断一个字符是否为大写字母
tolower()把字符串都转化为小写字母
toupper()把字符串都转化为大写字母

💦 字符大小写判断

 ① isalpha()

 isalpha()用来判断一个字符是否为字母,如果是字符则返回非零,否则返回零。

int main()
{// 返回非零cout << "判断 a 是否为字母:";cout << isalpha('a') << endl;// 返回零cout << "判断 2 是否为字母:";cout << isalpha('2') << endl;return 0;
}

② isalnum()

 isalnum()函数用来判断一个字符是否为数字或者字母,也就是说判断一个字符是否属于:a~z || A~Z || 0~9

int main()
{cout << "判断 'a' 是否为字母或数字:";// 返回非零cout << isalnum('a') << endl;cout << "判断 '2' 是否为字母或数字:";// 返回非零cout << isalnum('2') << endl;;cout << "判断 '.' 是否为字母或数字:";cout << isalnum('.') << endl;; // 零return 0;
}

 ③ isdigit()

 isdigit()函数用来判断一个字符是否为数字,如果是数字则返回非零,否则返回零

int main()
{cout << "判断 'a' 是否为数字:";// 返回零cout << isdigit('a') << endl;cout << "判断 '2' 是否为数字:";// 返回非零cout << isdigit('2') << endl;;return 0;
}

 ④ islower()

islower() 函数用来判断一个字符是否为小写字母,也就是是否属于a~z。 

int main()
{cout << "判断 'A' 是否为小写字母:";// 返回零cout << islower('A') << endl;cout << "判断 'a' 是否为小写字母:";// 返回非零cout << islower('a') << endl;;return 0;
}

 ⑤ isupper()

isupper()和islower相反,用来判断一个字符是否为大写字母。 

	cout << "判断 'A' 是否为大写字母:";// 返回非零cout << isupper('A') << endl;cout << "判断 'a' 是否为大写字母:";// 返回零cout << isupper('a') << endl;;return 0;

 💦 字符大小写转换

 ① tolower()

tolower()函数是把字符串都转化为小写字母。 

✨方法一:
int main()
{string s = "ABCDEFG";for (int i = 0; i < s.size(); i++){// 大写转换小写s[i] = tolower(s[i]);}cout << s << endl;return 0;
}

 ✨方法二:

通过STL的transform算法配合的toupper和tolower来实现该功能

int main()
{string s = "ABCDEFG";transform(s.begin(), s.end(), s.begin(), ::tolower);cout << s << endl;return 0;
}

② toupper()

 toupper()函数是把字符串都转化为大写字母

 ✨方法一:
int main()
{string s = "abcdefg";for (int i = 0; i < s.size(); i++){// 小写转换大写s[i] = toupper(s[i]);}cout << s << endl;return 0;
}

 ✨方法二:
int main()
{string s = "abcdefg";transform(s.begin(), s.end(), s.begin(), ::toupper);cout << s << endl;return 0;
}

三、LeetCode例题使用示范

💦 验证回文串

题目链接:验证回文串 

 ✨方法一:

class Solution {
public:bool isPalindrome(string s) {string str="\0";//定义一个新的字符串for(int i=0;i<s.length();i++){//对字符串s进行遍历if(isalnum(s[i])){//isalnum判定是不是字母或者数字字符str += tolower(s[i]);//将大写字母转换为小写,如果不是则不动}}string str_rev(str.rbegin(),str.rend());//对新字符串进行反转if(str==str_rev)//如果反转以后的字符串和原字符串相等则返回truereturn true;elsereturn false;}
};

 ✨方法二:

//更好的双指针做法。
class Solution {
public:bool isPalindrome(string s) {string str = "\0";int n = s.length();int begin = 0;int end = n - 1;while (begin < end) {while (begin < end && (!isalnum(s[begin]))) {begin++;//从前往后找符合条件的字符}while (begin < end && (!isalnum(s[end]))) {end--;//从后往前找符合条件的字符}if (tolower(s[begin]) != tolower(s[end]))return false;begin++;end--;}return true;}
};

 💦 检验大写字母

 题目链接:检验大写字母

class Solution {
public:bool detectCapitalUse(string word) {int size=word.length();int Big=0;//大写字符int Small=0;//小写字符for(int i=0;i<size;i++)//先遍历字符串中的字符{if(islower(word[i]))//islower()小写字符个数{Small++;}else if(isupper(word[i]))//isupper()大写字符个数{Big++;}}if(Small==size||Big==size)//如果都是大写或者小写返回true{return true;}else if(Big==1&&isupper(word[0]))//如果大写只有一个且是第一个返回true{return true;}elsereturn false;}
};

 四、共勉

 以下就是我对 string 类---字符判断与大小写转换 的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对C++  vector 类的理解,请持续关注我哦!!! 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】MySQL视图

文章目录 一、视图的基本使用1.创建视图2.修改了视图&#xff0c;对基表数据有影响3.修改了基表&#xff0c;对视图有影响4.删除视图 二、视图规则和限制 一、视图的基本使用 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称…

【springboot】@SpringBootApplication 加载原理解析

从何处放入 AutoConfigurationImportSelector.selectImports AbstractApplicationContext.refresh AbstractApplicationContext.invokeBeanFactoryPostProcessors PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors 此处一个关键信息 只有BeanDefinition…

Html Open with Live Server 报错windows找不到文件

输入setting.json 填入你的浏览器路径 即可

【Qt】Qt代码格式化配置

这里记录一下个人使用的格式化配置: 个人使用的格式化工具Artistic Style格式化信息&#xff1a; --stylelinux #&#xff1a;Linux 风格格式和缩进 #--stylekr #indentspaces4 # 缩进采用4个空格 -A1 #使用AllMan程序风格&#xff0c;即大括号另起一行。 indent-switche…

java入门-变量与常量

java 基本语法-变量与常量 变量 变量的本质 程序中我们会经常看到类似 int x 3**;** 的表达式&#xff0c;x就是我们常说的变量&#xff0c;从计算机角度我们来看看变量x的本质是什么&#xff1f; 在程序开发中定义一个变量x, 计算机会在内存中开辟内存空间&#xff0c;计算…

测电笔与零火线

火线零线不分正负&#xff0c;因此即使接反电气仍可以使用&#xff0c;只是当开关断电的时候灯泡是有电的&#xff0c;此时比较危险容易触电。 火线和零线上的电流都是正弦波。简单的来讲&#xff0c;对于交流电路&#xff0c;电流一会从火线出发通过用电设备流向零线&#xff…

上位机图像处理和嵌入式模块部署(qmacvisual预处理实战)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面&#xff0c;我们说了图像预处理&#xff0c;但是没有给出相应的实战案例。今天还是有必要做一个说明的。预处理方法虽然相关的算法很多&#…

实现el-table合并列

效果图如下 <el-table :data"atlasDataList" style"width: 100%" :span-method"spanMethod"><el-table-column prop"stationName" label"" width"180" /><el-table-column prop"atlasNumbe…

中间件-消息队列

消息队列基础知识 什么是消息队列 本处提到的消息队列是指各个服务以及系统组件/模块之间的通信&#xff0c;属于一种中间件。参与消息传递的双方称为生产者和消费者&#xff0c;生产者负责发送消息&#xff0c;消费者负责处理消息。 消息队列作用 通过异步处理&#xff0…

你知道三拳打死镇关西的故事吗?郑屠户做了什么让鲁达竟将他置于死地?

你知道三拳打死镇关西的故事吗&#xff1f;郑屠户做了什么让鲁达竟将他置于死地&#xff1f; 《水浒传》第二集里&#xff0c;咱们看到了鲁提辖&#xff0c;也就是鲁达&#xff0c;他为啥要打郑屠户&#xff0c;也就是人们常说的镇关西。这鲁提辖可是个仗义疏财的好汉&#xf…

好委屈,东方甄选为何总是被供应商骗?

东方甄选最近很委屈。 315晚会过后&#xff0c;知名打假人王海爆料&#xff0c;称315晚会曝光的槽头肉扣肉在东方甄选和小杨哥的直播间里销售过。 东方甄选赶忙去问了问供应商情况。 供应商的回答让他感到暖心&#xff0c;表示虽然315晚会曝光了我们公司违规使用糟头肉&…

vue3项目

案例用到的知识点如下&#xff1a; ① vite 创建项目 ② 组件的封装与注册 ③ props ④ 样式绑定 ⑤ 计算属性 ⑥ 自定义事件 ⑦ 组件上的 v-model 效果如下图&#xff1b; 页面2 项目结构&#xff1a; 初始化项目 在终端运行以下的命令&#xff0c;初始化 vite 项目&#xf…

每日五道java面试题之mybatis篇(五)

目录&#xff1a; 第一题. 实体类属性名和表中字段名不⼀样 &#xff0c;怎么办?第二题. Mybatis是否可以映射Enum枚举类&#xff1f;第三题. Mybatis能执⾏⼀对⼀、⼀对多的关联查询吗&#xff1f;第四题. Mybatis是否⽀持延迟加载&#xff1f;原理&#xff1f;第五题. 如何获…

【项目实践day06】JWT令牌相关

什么是JWT 简洁的、自包含的格式&#xff0c;用于在通信双方以json数据格式安全的传输信息。 由于数字签名的存在&#xff0c;这些信息是可靠的。 jwt就是将原始的json数据格式进行了安全的封装&#xff0c;这样就可以直接基于jwt在通信双方安全的进行信息传输了。简洁&#…

CTF 题型 SSRF攻击例题总结

CTF 题型 SSRF攻击&例题总结 文章目录 CTF 题型 SSRF攻击&例题总结Server-side Request Forgery 服务端请求伪造SSRF的利用面1 任意文件读取 前提是知道要读取的文件名2 探测内网资源3 使用gopher协议扩展攻击面Gopher协议 &#xff08;注意是70端口&#xff09;python…

前端项目,个人笔记(五)【图片懒加载 + 路由配置 + 面包屑 + 路由行为修改】

目录 1、图片懒加载 步骤一&#xff1a;自定义全局指令 步骤二&#xff1a;代码中使用 ​编辑步骤三&#xff1a;效果查看 步骤四&#xff1a;代码优化 2、封装组件案例-传对象 3、路由配置——tab标签 4、根据tab标签添加面包屑 4.1、实现 4.2、bug&#xff1a;需要…

智能合约 之 部署ERC-20

Remix介绍 Remix是一个由以太坊社区开发的在线集成开发环境&#xff08;IDE&#xff09;&#xff0c;旨在帮助开发者编写、测试和部署以太坊智能合约。它提供了一个简单易用的界面&#xff0c;使得开发者可以在浏览器中直接进行智能合约的开发&#xff0c;而无需安装任何额外的…

进销存管理完整方案:那些让人头疼的进销存难题及解决方法!

什么是进销存管理&#xff1f;为何进销存管理在企业管理中如此重要&#xff1f;进销存管理的核心模块包括哪些&#xff1f;为何企业在进销存管理中常常遭遇前后方协作不畅、数据不同步等痛点&#xff1f;又该如何针对进销存管理痛点进行优化&#xff1f;本文将从进销存管理的基…

代码随想录训练营第50天 | LeetCode 123.买卖股票的最佳时机III、LeetCode 188.买卖股票的最佳时机IV

LeetCode 123.买卖股票的最佳时机III 文章讲解&#xff1a;代码随想录(programmercarl.com) 视频讲解&#xff1a;动态规划&#xff0c;股票至多买卖两次&#xff0c;怎么求&#xff1f; | LeetCode&#xff1a;123.买卖股票最佳时机III_哔哩哔哩_bilibili 思路 代码如下&am…

java实现kml文件下载接口

根据业务需求&#xff0c;需提供一个下载kml格式航线文件的HTTP GET接口 示例代码 package com.kyrielx.kmzdemo.controller;import org.apache.commons.io.FileUtils; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org…