locale本地化库学习

std::locale 类型的对象(本地环境对象)是不可变刻面的一个不可变索引集。C++ 输入/输出库的每个流对象都与一个 std::locale 对象关联,并用它的各刻面来分析及格式化所有数据。另外,每个 std::basic_regex 对象也都与一个本地环境对象关联。 (C++11 起)本地环境对象也可以在标准容器和算法中用作进行字符串校排的谓词,而且也可以直接访问,以获得或修改它所保有的平面。

成员函数

operator=

替换本地环境
(公开成员函数)

combine

以复制自另一本地环境的编译时鉴别的刻面构造本地环境
(公开成员函数)

name

返回本地环境的名称,或若它无名则为 "*"
(公开成员函数)

operator==operator!=

(C++20 中移除)

本地环境对象之间的相等性比较
(公开成员函数)

operator()

用此本地环境的校排刻面以字典序比较两个字符串
(公开成员函数)

global

[静态]

更改全局本地环境
(公开静态成员函数)

示例代码:

#include <iostream>
#include <locale>
#include <string>         // std::string
#include <algorithm>      // std::sort
#include <vector>
#include <assert.h>int main()
{//name examplestd::locale loc(std::locale(), new std::ctype<char>);std::cout << "默认本地环境是 " << std::locale().name() << '\n'<< "用户的本地环境是 " << std::locale("").name() << '\n'<< "一个无名本地环境是 " << loc.name() << '\n';//combine exampleconst double number = 1000.25;std::cout << "\'C\' 本地环境:" << number << '\n';std::locale loc2 = std::locale().combine<std::numpunct<char>>(std::locale("en_US.UTF8"));std::cout.imbue(loc2);std::cout << "带有 en_US numpunct 的 \"C\" 本地环境:" << number << '\n';//global examplestd::wcout << "用户偏好的本地环境设置是" << std::locale("").name().c_str() << '\n';// 在启动时,全局本地环境是 "C" 本地环境std::wcout << 1000.01 << '\n';// 以用户偏好的本地环境替换 C++ 全局本地环境和 C 本地环境std::locale::global(std::locale("en_US.UTF8"));  //设置全局环境// 将来的宽字符输出会使用新的全局本地环境std::wcout.imbue(std::locale());// 再次输出同一数字std::wcout << 1000.01 << '\n';std::locale loc3;std::cout << "loc3.name()==================== " << loc3.name() << '\n';  //en_US.UTF8// locale::operator!= exampleif (std::cout.getloc() != std::locale("C"))std::cout << "cout is not using the C locale.\n";elsestd::cout << "cout is using the C locale.\n";// locale::operator() examplestd::string mystr[] = { "light","zoo","apple" };std::locale loc4;  // default global localestd::cout << std::boolalpha;// implicit call to locale::operator() (using operator)std::cout << mystr[0] << " < " << mystr[1] << " ? ";std::cout << (loc4(mystr[0], mystr[1])) << '\n';// explicit call to locale::operator() (using functional call)std::cout << mystr[1] << " < " << mystr[2] << " ? ";std::cout << (loc4.operator()(mystr[1], mystr[2])) << '\n';// locale::operator() as comparison predicate for algorithm:std::sort(mystr, mystr + 3, loc4);std::cout << "sorted sequence:";for (int i = 0; i < 3; i++) std::cout << ' ' << mystr[i];std::cout << '\n';// locale::operator= examplestd::locale loc5;std::cout << "loc5.name()==================== " << loc5.name() << '\n';  //en_US.UTF8loc5 = std::locale("ru_RU.UTF8");std::cout << "loc5.name()==================== " << loc5.name() << '\n';// locale::operator== exampleif (loc5 == std::locale("ru_RU.UTF8"))std::cout << "loc5 is using the ru_RU.UTF8 locale.\n";elsestd::cout << "loc5 is not using the ru_RU.UTF8 locale.\n";std::vector<std::wstring> v = { L"жил", L"был", L"кот" };std::sort(v.begin(), v.end(), std::locale("ru_RU.UTF8"));assert(v[0] == L"был");assert(v[1] == L"жил");assert(v[2] == L"кот");return 0;
}

运行结果:

参考:

https://cplusplus.com/reference/locale/locale/

标准库头文件 <locale> - cppreference.com

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

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

相关文章

Linux下软件安装

提示&#xff1a;制作不易&#xff0c;可以点个关注和收藏哦。 前言 介绍 Ubuntu 下软件安装的几种方式&#xff0c;及 apt&#xff0c;dpkg 工具的使用。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考. 一、先体验一下 比如我们想安装一个软件&…

Diffusers代码学习: 多个Adapter

T2I Adapter也是可组合的&#xff0c;允许您使用多个适配器对图像施加多个控制条件。例如&#xff0c;可以使用姿势贴图提供结构控制&#xff0c;使用深度贴图进行深度控制。这是由[MultiAdapter]类启用的。 让我们用姿势和深度适配器来调节文本到图像的模型。创建深度和姿势图…

简单的项目部署脚本(转载)

简单的项目部署脚本 1. 环境准备1.1 java1.2 maven1.3 git 2 以项目springboot-demo为例,创建项目路径3. 基于docker启动的部署脚本4. 部署日志记录4.1 将部署开始和结束的日志追加到部署日志中4.2 部署结果通知 原文链接 https://mp.weixin.qq.com/s/jjW2aIi_KUusQdc9uLnUGg …

IT闲谈-Kylin入门教程

目录 一、引言二、Kylin简介三、环境准备四、安装与配置五、数据导入与建模六、查询与分析七、总结 一、引言 Apache Kylin是一个开源的分布式分析引擎&#xff0c;旨在提供Hadoop/Spark之上的SQL接口及多维分析&#xff08;OLAP&#xff09;能力以支持超大规模数据。Kylin通过…

【设计模式】结构型设计模式之 享元模式

文章目录 介绍关键概念 应用举例象棋游戏共享棋子对象文本编辑器中文字格式设计成享元模式 享元模式在 Java 中的应用享元模式在包装类缓存中的应用享元模式在 String 中的应用 对比享元模式和单例模式的区别享元模式与缓存的区别 总结优点缺点 介绍 享元模式&#xff0c;”享…

简单用java集合模拟斗地主发牌操作

简易斗地主发牌&#xff08;熟悉java集合的使用&#xff09; 1、需求 按照斗地主规则&#xff0c;完成洗牌发牌的动作。 具体要求如下&#xff1a; 1、准备牌&#xff1a;组装54张扑克牌 2、洗牌&#xff1a;54张牌顺序打乱 3、发牌&#xff1a;三个玩家参与游戏&#xf…

TinyVision V851s 使用 OpenCV + NPU 实现 Mobilenet v2 目标分类识别

用39块钱的V851se视觉开发板做了个小相机。 可以进行物品识别、自动追焦&#xff01; 这个超低成本的小相机是在V851se上移植使用全志在线开源版本的Tina Linux与OpenCV框架开启摄像头拍照捕获视频&#xff0c;并结合NPU实现Mobilenet v2目标分类识别以及运动追踪等功能......并…

以无厚,入有间,做一件事为什么靠努力不行,不能长期维持

庖丁解牛&#xff0c;并不是在说人和技巧&#xff0c;而是在说解牛不在于刀的锋利&#xff0c;而是怎样才能做到让刀不产生损耗&#xff0c;就是熟悉牛肉纹路&#xff0c;按照纹路和肉骨间隙进行操刀。这就是尊重自然规律&#xff0c;对于人也是一样的&#xff0c;如果所有事情…

C++输入输出与IO流

C 输入输出与I/O流 文章目录 C 输入输出与I/O流IO类型与基础特性概念与特性IO状态输出缓冲区 文件输入输出文件模式 string流IO处理中常用的函数及操作符综合练习与demo一、 创建文件并写入二、控制台输入数据并拆分存储三、读写电话簿 IO类型与基础特性 C11标准提供了几种IO处…

el-date-picker设置结束时间为23:59:59

type datetime <el-date-pickerstyle"width: 100%"v-model"currentEditConfigObj.expirationDate"placeholder"请选择结束时间"type"datetime"default-time[23:59:59]value-format"yyyy-MM-dd HH:mm:ss"format"yy…

Python使用Flask构建简单的web应用

构建一个简单的 Flask Web 应用程序是学习 Python Web 开发的良好起点。Flask 是一个轻量级的 WSGI Web 应用框架&#xff0c;它的主要目标是让开发者更容易构建 Web 应用&#xff0c;同时保持简单性和灵活性。下面我们将详细介绍如何使用 Flask 构建一个简单的 Web 应用&#…

一个支持多存储的文件列表/WebDAV程序,使用 Gin 和 Solidjs

网址 https://github.com/alist-org/alist 看了下介绍&#xff0c;支持挺多oss和云盘的&#xff0c;看了下代码&#xff0c;值得学习一下 部署方便&#xff0c;开箱即用 文件预览&#xff08;PDF、markdown、代码、纯文本……&#xff09; 画廊模式下的图像预览 视频和音频预…

android 抓取 logcat 日志的方法

1.找到这个路径 2.然后执行命令&#xff08;adb logcat -v time >.\\logcat.log&#xff09;&#xff0c;开始抓取日志 3.这个时候就可以去操作APP了&#xff0c;复现BUG了。 Ctrlc 结束日志抓取 adb logcat -c 清空旧日志

逆市创新高!水电“双雄“是怎样炼成的? 博通,赢麻了!

高分红夏季用电高峰AI的尽头是电力 6月7日&#xff0c;长江电力&#xff08;600900&#xff09;、华能水电&#xff08;600025&#xff09;股价双双上涨。截至收盘&#xff0c;长江电力股价上涨1%&#xff0c;收于28.31元/股&#xff1b;华能水电股价上涨1.52%&#xff0c;收于…

Matlab|遗传粒子群-混沌粒子群-基本粒子群

目录 1 主要内容 2 部分代码 3 效果图 4 下载链接 1 主要内容 很多同学在发文章时候最犯愁的就是创新点创新点创新点&#xff08;重要的事情说三遍&#xff09;&#xff0c;对于采用智能算法的模型&#xff0c;可以采用算法改进的方式来达到提高整个文章创新水平的目的&…

基于STM32开发的智能机器人导航系统

目录 引言环境准备智能机器人导航系统基础代码实现&#xff1a;实现智能机器人导航系统 4.1 距离传感器数据读取4.2 电机控制4.3 实时路径规划与避障4.4 用户界面与状态显示应用场景&#xff1a;智能机器人导航与控制问题解决方案与优化收尾与总结 1. 引言 智能机器人导航系…

C++: map和set的使用

目录 1.头文件 2.set和multiset的区别 3.set和map的区别 4.加了multi的区别 这里只说几个要点。 1.头文件 #include <map> #include <set> 2.set和multiset的区别 set和multiset的区别 setmultiset只能插入不重复的key可以插入重复的key一串包含重复的strin…

力扣算法题:轮转数组 -- 多语言实现

无意间看到&#xff0c;力扣存算法代码居然还得升级vip。。。好吧&#xff0c;我自己存吧 其他的题找不回来了……重写吧 golang&#xff1a; func rotate(nums []int, k int) { // 第一想到的 // n : len(nums) // k % n // newNums : nums[n-k:] // numsFeature : …

btstack协议栈实战篇--GAP LE Advertisements Scanner

btstack协议栈---总目录-CSDN博客 目录 1.GAP LE 用于接收广播的设置 2.GAP LE 广告数据转储器 3.HCI packet handler 4.log信息 实现如何扫描和解析广告。 1.GAP LE 用于接收广播的设置 GAP LE 广告作为 GAP EVENT ADVERTISING REPORT的自定义 HCI 事件被接收。要接收…

中国西部AI创新港,数字经济的新引擎

编辑&#xff1a;阿冒 设计&#xff1a;沐由 时间&#xff1a;2024年5月31日。 地点&#xff1a;西安交通大学创新港校区涵英楼千人报告厅。 人物&#xff1a;近千位政府、高校和企事业单位的代表&#xff0c;还有我。 我们的脚下&#xff0c;就是八百里秦川。 三秦自古多才俊。…