字母的大小写转换(tolower、toupper、transform)

server/2024/9/23 11:20:18/

字母的大小写转换(tolower、toupper、transform)

1. tolower()、toupper()函数

(这个在之前的一篇文章 “字符串中需要掌握的函数总结(1)”中有较为详细的介绍。)

【代码如下】

#include <iostream>
#include <string>
using namespace std;
int main()
{string s="bdioICvnHns",s1,s2;for(int i=0;i<s.length();i++){s1.push_back(tolower(s[i]));s2.push_back(toupper(s[i]));}cout<<"tolower转变后:"<<s1<<endl;cout<<"toupper转变后:"<<s2<<endl;
}

【运行结果】

2.transform()函数(头文件是 <algorithm>)

上面的 toupper、tolower只能一次转换单个字母,要转化整个字符串,则需遍历,若不想遍历,那么可以选择用 transform。

【代码如下】

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{string s="bdioICvnHns";transform(s.begin(),s.end(),s.begin(),::tolower);cout<<"string字符串-tolower转变后:"<<s<<endl;transform(s.begin(),s.end(),s.begin(),::toupper); cout<<"string字符串-toupper转变后:"<<s<<endl;char ch[]={'m','L','k','t','P','h','F'};transform(ch,ch+7,ch,::tolower);cout<<"char字符串-tolower转变后:"<<ch<<endl;transform(ch,ch+7,ch,::toupper);cout<<"char字符串-toupper转变后:"<<ch<<endl;}

【运行结果】

【说明】

transform(s.begin(),s.end(),s.begin(),::toupper) 中的  “: :” 是作用域解析运算符,它用于指定一个特定的命名空间或类中的成员。当你在代码中使用 using namespace std; 时,你告诉编译器在当前的作用域中考虑 std 命名空间中的名字。然而,标准库中的某些函数,比如 toupper,并不在 std 命名空间中,而是在全局命名空间中。

当你调用 transform(s.begin(), s.end(), s.begin(), ::toupper); 时,要使用 : :toupper 来明确指出 toupper 函数是在全局命名空间中,而不是在 std 命名空间中。这是因为 transform 函数需要知道具体使用哪个 toupper 函数,而全局命名空间中的 toupper 是你想要的。

如果你省略了 ::,编译器会尝试在当前作用域(包括由于 using namespace std; 而引入的 std 命名空间)中查找toupper。由于 std 命名空间中没有toupper,编译器会报错,因为它找不到这个函数。所以,:: 在这里的作用是确保编译器在全局命名空间中查找 toupper 函数,而不是在 std 命名空间中。这是必要的,因为 toupper 函数实际上是在全局命名空间中定义的。


http://www.ppmy.cn/server/107388.html

相关文章

解决 JS WebSocket 心跳检测 重连

解决 JS WebSocket 心跳检测 重连 文章目录 解决 JS WebSocket 心跳检测 重连一、WebSocket 心跳检测的作用二、心跳检测的处理方案1. 创建 WebSocket 连接2. 心跳参数设置3. 心跳检测逻辑4. 心跳包响应处理5. 断线重连机制 三、总结 一、WebSocket 心跳检测的作用 WebSocket 是…

【网络】网络层协议——IP协议

目录 1.TCP和IP的关系 2.IP协议报文 2.1. 4位首部长度&#xff0c;16位总长度&#xff0c;8位协议 2.2. 8位生存时间 &#xff0c;32位源IP地址和32位目的IP地址 3.IP地址的划分 3.1.IP地址的表现形式 3.2.旧版IP地址的划分 3.2.1.旧版IP地址的划分思路 3.2.2.分类划…

【虚拟化】KVM常用命令操作(virsh虚拟机常用操作之开关|连接|自启|克隆|快照)

目录 ​编辑一、KVM概述 1.1 KVM工具栈 1.2 libvirt架构概述 二、使用virsh管理虚拟机 三、kvm基本功能管理 1.帮助命令 2.KVM的配置文件存放目录 3.查看虚拟机状态 4.虚拟机关机与开机 5.强制虚拟机系统关闭电源 6.通过配置文件启动虚拟机系统 7.修改虚拟机配置文…

C++操作excel,即使函数设置了不备份,但保存后,excel依然会自动生成备份文件的原因分析,及如何来禁止自动备份

开发环境 操作系统&#xff1a;windows 10 编译器&#xff1a;Visual Studio 2010、2015、2017、2022 office 2016、2019、2021 wps 2019、2024 问题描述 通过C操作excel&#xff0c;保存后&#xff0c;excel会自动生成备份文件。 void CExcelDemoDlg::OnBnClickedButton1() …

从多维度视角探讨“开源AI智能名片O2O商城小程序”的设计与管理

摘要&#xff1a;在数字化转型的浪潮中&#xff0c;产品设计与管理已成为企业竞争力的核心要素。本文旨在从产品设计、产品管理及产品文化三个维度&#xff0c;深入探讨“开源AI智能名片O2O商城小程序”的设计理念与实践策略。通过强调设计即沟通的原则&#xff0c;本文分析了直…

出租车4G/5G无线车载视频监控系统解决方案(上)

目录 一、项目概述 1.1 项目背景 1.2 设计原则 1.3 设计目标 1.4 实施意义 1.4.1 出租车内监控 1.4.2车内实时监听 1.4.3 车内预报警联动 二、系统总体设计 2.1建设目标 2.2系统模式 2.3设计思路 2.3.1要考虑视频的传输方式 2.3.1.1. 实时性 2.3.1.2. 高清视频…

No primary or default constructor found for interface java.util.List

场景&#xff1a; 本地swagger测试新开接口报错No primary or default constructor found for interface java.util.List 分析&#xff1a; PostMapping("/httpTest")ApiOperation(value "httpTest")public ReturnDTO httpTest(List<String> list…

数据库mysql集群主从、高可用MGR、MHA技术详解

一、安装数据库mysql步骤 环境&#xff1a;红帽7.9系统 安装依赖 yum install cmake gcc-c openssl-devel ncurses-devel.x86_64 libtirpc-devel-1.3.3-8.el9_4.x86_64.rpm rpcgen.x86_64 -y 将下载的MySQL软件包解压并cd到mysql的目录下 [rootmysql-node10 ~]# tar zxf mysq…