C++ 如何正确地将字符串转换为大写或小写

news2024/11/7 10:46:26

当你开发一个应用程序时,需要将字符串转为小写形式。于是,你写下了的代码。

std::string name = "Hello World";
std::transform(name.begin(), name.end(), name.begin(), std::tolower);

乍看之下,使用 STL 的 std::transform 和 std::tolower 没什么问题,事实上却踩了三个坑:

1、std::tolower 不能直接使用

由于 std::tolower 并不是一个可寻址的函数,因此不能直接作为函数指针传递给 std::transform,需要改为:

std::transform(name.begin(), name.end(), name.begin(), [](unsigned char c){return std::tolower(c);});

2、字符类型匹配问题

众所周知,std::tolower 只适用于 unsigned char 范围内的字符,如果字符串中有非 ASCII 字符,比如中文、日文、韩文或特殊符号,以及宽字符字符串 std::wstring,std::tolower 都无法正确处理,甚至可能导致未定义行为。 因此,需要用到 std::towlower 但这仍然有问题,因为它无法正确处理 UTF-16 编码中的代理对(surrogate pairs),也就是那些需要两个 wchar_t 来表示的字符。

std::string name = L"Hello World";
std::transform(name.begin(), name.end(), name.begin(), [](Wchar_t c){return std::tolower(c);});

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

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

相关文章

linux驱动-i2c子系统框架学习(1)

可以将整个 I2C 子系统用下面的框图来描述: 可以将上面这一 I2C 子系统划分为三个层次,分别为用户空间、内核空间和硬件层,内核空间就包括 I2C 设备驱动层、I2C 核心层和 I2C 适配器驱动层, 本篇主要内容就是介绍 I2C 子系统框架中…

鸿蒙系统崛起:开发者如何把握机遇、应对挑战并打造卓越应用体验?

在当今科技发展的浪潮中,鸿蒙系统(HarmonyOS)如一颗璀璨之星,正以迅猛之势崛起。随着其持续发展,鸿蒙系统在全球操作系统市场中已然崭露头角,呈现出与安卓(Android)和iOS分庭抗礼的态…

Scala入门基础(17)Set集

Set的定义Set的代码结构不可变与可变Set的区别Set常见操作 一.Set的定义 Set:集合 Set的特点:唯一(元素不相同) 二.Set的代码结构 val 变量名 Set[类型](元素1,元素2...) (演示&#xff09…

基于单片机的燃气报警阀门系统

本设计基于单片机的燃气报警阀门系统,燃气报警阀门系统采用STM32主控制器为核心芯片,外围电路由燃气传感器、OLED液晶显示模块、按键模块、蜂鸣器报警模块、电磁阀以及SIM800模块等模块组成。燃气传感器模块负责采集燃气浓度数据,采集完成由S…

揭秘云计算 | 2、业务需求推动IT发展

揭秘云计算 | 1、云从哪里来?-CSDN博客https://blog.csdn.net/Ultipa/article/details/143430941?spm1001.2014.3001.5502 书接上文: 过去几十年间IT行业从大型主机过渡到客户端/服务器,再过渡到现如今的万物互联,IT可把控的资…

qt QItemSelectionModel详解

1、概述 QItemSelectionModel是Qt框架中提供的一个功能强大且灵活的项选择模型类。它主要用于在用户界面中管理和操作用户选定的项,是实现交互式和响应式应用程序的重要组件。QItemSelectionModel能够帮助开发者创建用户友好和高效的多选列表、表格数据选择等应用场…

SAP ABAP开发学习——WDA 七 使用文本与消息

目录 从数据字典读取文本 使用OTR文本 从程序中调用OTR文本 消息分类 定义消息显示位置 text类消息的使用 T100 消息的使用 OTR消息实例 消息内容修改 从数据字典读取文本 使用OTR文本 可以自己创建OTR文本 从程序中调用OTR文本 消息分类 定义消息显示位置 text类消息的…

实习作假:阿里健康实习做了RABC中台,还优化了短信发送流程

最近有二本同学说:“大拿老师,能帮忙看下简历吗?” 如果是从面试官的角度来看,这个同学的实习简历是很虚假的。 但是我们一直强调的是:校招的实习简历是不能出现明显的虚假。 首先,你去公司做事情&#…

mqtt 传递和推送 温湿度计消息 js

mqtt 传递和推送 温湿度计消息 做了一个mqtt的小网站 包括设备管理,订阅管理,连接认证订阅授权 这里我新增了一个设备 订阅组温湿度里面有两个订阅 设备详情授权给设备使用 设备连接 和之前的wifi连接一样 温湿度也和之前的使用一样 require(u…

基于Jeecgboot3.6.3vue3的flowable流程增加online表单的审批支持(一)整体思路

更多技术支持与服务请加入我的知识星球或加我微信,名称:亿事达nbcio技术交流社区https://t.zsxq.com/iPi8F 今天讲一下流程审批支持online表单,我们知道,之前的VForm3表单不支持数据库存储,自定义业务表单要求又比较高,需要自己写一些前后端的代码,那online就不需要,可以…

Git超详细笔记包含IDEA整合操作

git超详细笔记 文章目录 git超详细笔记第1章Git概述1.1、何为版本控制1.2、为什么需要版本控制1.3、版本控制工具1.4 、Git简史1.5、Git工作机制1.6 、Git和代码托管中心 第2章Git安装第3章Git常用命令3.1、设置用户签名3.2、初始化本地库本地库(Local Repository&a…

HTML 基础标签——多媒体标签<img>、<object> 与 <embed>

文章目录 1. `<img>` 标签主要属性示例注意事项2. `<object>` 标签概述主要属性示例注意事项3. `<embed>` 标签概述主要属性示例注意事项小结在现代网页设计中,多媒体内容的使用变得越来越重要,因为它能够有效增强用户体验、吸引注意力并传达信息。HTML 提…

flutter 项目初建碰到的控制台报错无法启动问题

在第一次运行flutter时&#xff0c;会碰见一直卡在Runing Gradle task assembleDebug的问题。其实出现这个问题的原因有两个。 一&#xff1a;如果你flutter -doctor 检测都很ok&#xff0c;而且环境配置都很正确&#xff0c;那么大概率就是需要多等一会&#xff0c;少则几十分…

使用ssh-key免密登录服务器或免密连接git代码仓库网站

ssh登录服务器场景 假设有两台机器&#xff0c;分别是&#xff1a; 源机器&#xff1a;主机A&#xff08;hostA&#xff09;&#xff0c;ip&#xff1a;198.168.0.1 目标机器&#xff1a;主机B&#xff08;hostB&#xff09;&#xff0c;ip&#xff1a;192.168.0.2 ssh-key免…

初识Electron 进程通信

概述 Electron chromium nodejs native API&#xff0c;也就是将node环境和浏览器环境整合到了一起&#xff0c;这样就构成了桌面端&#xff08;chromium负责渲染、node负责操作系统API等&#xff09; 流程模型 预加载脚本&#xff1a;运行在浏览器环境下&#xff0c;但是…

小菜家教平台(三):基于SpringBoot+Vue打造一站式学习管理系统

目录 前言 今日进度 详细过程 相关知识点 前言 昨天重构了数据库并实现了登录功能&#xff0c;今天继续进行开发&#xff0c;创作不易&#xff0c;请多多支持~ 今日进度 添加过滤器、实现登出功能、实现用户授权功能校验 详细过程 一、添加过滤器 自定义过滤器作用&…

小新学习k8s第六天之pod详解

一、资源限制 Pod是k8s中的最小的资源管理组件&#xff0c;pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。k8s中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的&#xff0c;例如&#xff0c;用于管理Pod运行的StatefulSet和Deployment等…

戴尔电脑 Bios 如何进入?Dell Bios 进入 Bios 快捷键是什么?

BIOS&#xff08;基本输入输出系统&#xff09;是计算机启动时运行的第一个程序&#xff0c;它负责初始化硬件并加载操作系统。对于戴尔电脑用户来说&#xff0c;有时可能需要进入 BIOS 进行一些特定的设置调整&#xff0c;比如更改启动顺序、调整性能选项或解决硬件兼容性问题…

【UE5】一种老派的假反射做法,可以用于移动端,或对反射的速度、清晰度有需求的地方

没想到大家这篇文章呼声还挺高 这篇文章是对它的详细实现&#xff0c;建议在阅读本篇之前&#xff0c;先浏览一下前面的文章&#xff0c;以便更好地理解和掌握内容。 这种老派的假反射技术&#xff0c;适合用于移动端或对反射效果的速度和清晰度有较高要求的场合。该技术通过一…

MongoDB笔记02-MongoDB基本常用命令

文章目录 一、前言二、数据库操作2.1 选择和创建数据库2.2 数据库的删除 3 集合操作3.1 集合的显式创建3.2 集合的隐式创建3.3 集合的删除 四、文档基本CRUD4.1 文档的插入4.1.1 单个文档插入4.1.2 批量插入 4.2 文档的基本查询4.2.1 查询所有4.2.2 投影查询&#xff08;Projec…