c++11 标准模板(STL)本地化库 - 平面类别 - (std::ctype) 定义字符分类表(二)

本地化库

本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析,以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C++ 标准库的其他组件的行为。

平面类别

定义字符分类表

std::ctype

template< class CharT >
class ctype;

类 ctype 封装字符分类特征。所有通过 std::basic_istream<charT> 进行的流输入操作用感染于流中的 std::ctype<charT> 鉴别空白符以将输入记号化。流输出操作在输出前应用 std::ctype<charT>::widen() 到窄字符参数。

继承图

标准库提供二个孤立(独立于本地环境)的特化:

定义于头文件 <locale>

std::ctype<char>提供最小 "C" 本地环境分类的窄字符等价版本。此特化用表查找字符分类
std::ctype<wchar_t>提供适合于原生字符集的宽字符分类

另外, C++ 程序中构造的每个 locale 对象实现其自身(本地环境限定)的这些版本。

调用 do_is & 分类字符或字符序列

std::ctype<CharT>::is, 
std::ctype<CharT>::do_is

public:
bool is(mask m, CharT c) const;

(1)

public:
const CharT* is(const CharT* low, const CharT* high, mask* vec) const;

(2)

protected:
virtual bool do_is(mask m, CharT c) const;

(3)

protected:
virtual const CharT* do_is(const CharT* low, const CharT* high, mask* vec) const;

(4)

1,2) 公开成员函数,调用最终导出类的受保护虚成员函数 do_is

3) 检查字符 c 是否以掩码 m 分类。

4) 对字符数组 [low, high) 中的每个字符,鉴别完整分类掩码(例如默认本地环境中对于数字 '0' 为 digit|xdigit|alnum|print|graph ),并存储掩码于 vec 所指向数组的对应元素。

参数

c-要分类的字符
m-用于分类单个字符的掩码
low-指向要分类的字符数组中首字符的指针
high-要分类的字符数组的尾后一位置指针
vec-指向要填充的掩码数组首元素的指针

返回值

1,3) 若 cm 分类则为 true

2,4) high

调用示例

#include <locale>
#include <utility>
#include <vector>
#include <iostream>// 使绑定到 locale 的 facet 可析构的工具包装器
template<class Facet>
struct deletable_facet : Facet
{template<class ...Args>deletable_facet(Args&& ...args) : Facet(std::forward<Args>(args)...) {}~deletable_facet() {}
};int main()
{// 用默认 locale 分类单个字符auto& f = std::use_facet<std::ctype<char>>(std::locale());char c = '0';if (f.is(std::ctype_base::digit, c)) // 或 isdigit(c, locale());{std::cout << "'" << c << "' is a digit" << std::endl;}// 用具名 locale 分类每个字符串中的字符deletable_facet<std::ctype_byname<wchar_t>> f2("en_US.utf8");std::wstring wstring1 = L"z\u00df\u6c34\U0001d10b";std::vector<std::ctype_base::mask> vector1(wstring1.size());f2.is(&wstring1[0], &wstring1[0] + wstring1.size(), &vector1[0]);for (std::size_t n = 0; n < wstring1.size(); ++n){std::cout << std::hex << "U+" << wstring1[n] << " is: ";if (vector1[n] & std::ctype_base::alnum){std::cout << " alnum ";}if (vector1[n] & std::ctype_base::alpha){std::cout << " alpha ";}if (vector1[n] & std::ctype_base::digit){std::cout << " digit ";}if (vector1[n] & std::ctype_base::graph){std::cout << " graph ";}if (vector1[n] & std::ctype_base::cntrl){std::cout << " cntrl ";}if (vector1[n] & std::ctype_base::lower){std::cout << " lower ";}if (vector1[n] & std::ctype_base::print){std::cout << " print ";}if (vector1[n] & std::ctype_base::punct){std::cout << " punct ";}if (vector1[n] & std::ctype_base::space){std::cout << " space ";}if (vector1[n] & std::ctype_base::upper){std::cout << " upper ";}if (vector1[n] & std::ctype_base::xdigit){std::cout << " xdigit ";}if (vector1[n] & std::ctype_base::blank){std::cout << " blank ";}std::cout << std::endl;}return 0;
}

输出

'0' is a digit
U+7a is:  alnum  alpha  graph  lower  print
U+df is:  alnum  alpha  graph  lower  print
U+6c34 is:  alnum  alpha  graph  print
U+d834 is:
U+dd0b is:

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

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

相关文章

Maven是什么? Maven的概念+作用

1.Maven的概念 Maven中文意思为“专家“、”内行“的意思&#xff0c;它是一个项目管理工具&#xff0c;可以对Java项目进行构建、依赖管理&#xff0c;通俗点 就是通过pom.xml文件的配置获取jar包不用手动的去添加jar包。 2.Maven的作用 对于大的工程&#xff0c;需要引用各…

morkdown语法转微信公众号排版(免费)

morkdown语法转微信公众号排版&#xff08;免费&#xff09; 源码来自githab&#xff0c;有些简单的问题我都修复了。大家可以直接去找原作者的源码&#xff0c;如果githab打不开就从我下载的网盘里下载吧。 效果

IP代理池赋能Python网络爬虫

文章目录 什么是IP代理池代理服务器IP代理池的作用IP代理池的构建IP代理池的管理 相关案例IP代理在爬虫中的运用IP代理在数据收集中的运用IP代理在反爬虫中的运用 结语 什么是IP代理池 IP代理池是一个存储了多个可用代理IP地址的资源池&#xff0c;用于在网络爬虫、数据采集、…

C#属性显示

功能&#xff1a; 显示对象的属性&#xff0c;包括可显示属性、可编辑属性、及不可编辑属性。 1、MainWindow.xaml <Window x:Class"FlowChart.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://sche…

C++(11): 智能指针shared_ptr

1. 概述 shared_ptr智能指针&#xff0c;本质是“离开作用域会自动调整(减小)引用计数&#xff0c;如果引用计数为0&#xff0c;则会调用析构函数”。这样一来&#xff0c;就进化成类似于int、float等的一种会被自动释放的类型。 2. 初始化智能指针 初始化一个智能指针的方式比…

深入理解ThreadLocal原理

目录 1- 什么是ThreadLocal &#xff1f;2- ThreadLocal的作用&#xff1f;ThreadLocal实现线程间资源隔离ThreadLocal实现线程内资源共享 3- ThreadLocal 原理3-1 ThreadLocalMap3-2 ThreadLocalMap的扩容&#x1f511;1. 为什么会发生扩容&#xff1f;&#x1f511;2. Thread…

将图像转换为ASCII艺术形式

将图像转换为ASCII艺术形式 在本文中&#xff0c;我们将介绍一个使用OpenCV库将图像转换为ASCII艺术形式的简单程序。ASCII艺术是一种使用字符来表现图像的艺术形式&#xff0c;通过在终端或文本文件中显示字符的不同密度和颜色来模拟图像。这种技术已经存在了几十年&#xff…

【MySQL】7.MHA高可用配置及故障切换

什么是MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件 mha用于解决mysql的单点故障问题&#xff1b; 出现故障时&#xff0c;mha能在0~30秒内自动完成故障切换&#xff1b; 并且能在故障切换过程中&#xff0…

史上最强 PyTorch 2.2 GPU 版最新安装教程

一 深度学习主机 1.1 配置 先附上电脑配置图&#xff0c;如下&#xff1a; 利用公司的办公电脑对配置进行升级改造完成。除了显卡和电源&#xff0c;其他硬件都是公司电脑原装。 1.2 显卡 有钱直接上 RTX4090&#xff0c;也不能复用公司的电脑&#xff0c;其他配置跟不上。…

ARM FVP平台的terminal窗口大小如何设置

当启动ARM FVP平台时&#xff0c;terminal窗口太小怎么办&#xff1f;看起来非常累眼睛&#xff0c;本博客来解决这个问题。 首先看下ARM FVP平台对Host主机的需求&#xff1a; 通过上图可知&#xff0c;UART默认使用的是xterm。因此&#xff0c;我们需要修改xterm的默认字体设…

C++语言学习(一)——关键字、命名空间、输入输出

1. C关键字 C总计63个关键字&#xff0c;C语言32个关键字 2. 命名空间 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称将都存在于全局作用域中&#xff0c;可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本…

yolov5关键点检测-实现溺水检测与警报提示(代码+原理)

基于YOLOv5的关键点检测应用于溺水检测与警报提示是一种结合深度学习与计算机视觉技术的安全监控解决方案。该项目通常会利用YOLOv5强大的实时目标检测能力&#xff0c;并通过扩展或修改网络结构以支持人体关键点检测&#xff0c;来识别游泳池或其他水域中人们的行为姿态。 项…

Java入门学习Day04

本篇文章主要介绍了&#xff1a;如何输入数据、字符串拼接、自增自减运算符、类型转换&#xff08;int&#xff0c;double等&#xff09; CSDN&#xff1a;码银 公众号&#xff1a;码银学编程 一、键盘输入练习 Scanner是Java中的一个类&#xff0c;用于从控制台或文件中读…

DOTS:Burst

目录 一&#xff1a;简介 1.1 Getting started 1.2 C# language support 1.2.1 HPC# overview 1.2.1.1 Exception expressions 1.2.1.2 Foreach and While 1.2.1.3 Unsupported C# features in HPC# 1.2.2 Static read-only fields and static constructor support 1.…

STM32-03基于HAL库(CubeMX+MDK+Proteus)输入检测案例(按键控制LED)

文章目录 一、功能需求分析二、Proteus绘制电路原理图三、STMCubeMX 配置引脚及模式&#xff0c;生成代码四、MDK打开生成项目&#xff0c;编写HAL库的按键检测代码五、运行仿真程序&#xff0c;调试代码 一、功能需求分析 搭建完成开发STM32开发环境之后&#xff0c;开始GPIO…

LC 110.平衡二叉树

110. 平衡二叉树 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 输入&#xff1a; root [3,9,20,null,null,15,7]…

补充知识

补充知识1 内存的本质是对数据的临时存储 内存与磁盘进行交互时&#xff0c; 最小单位是4kb叫做页框(内存)和页帧(磁盘) 也就是&#xff0c; 如果我们要将磁盘的内容加载到内存中&#xff0c; 可是文件大小只有1kb&#xff0c; 我们也要拿出4kb来存他&#xff0c; 多余的就直…

基于Leaflet.js和Turf.js的等值线区间自定义及颜色自适应实践

目录 前言 一、Turf.js等值线相关制作 1、生成方法 2、主要参数 二、实际案例开发 1、新建展示页面 2、等值线生成 3、基于Leaflet的再优化 总结 前言 在气象方面的GIS应用当中&#xff0c;会根据实际的工作需要建立不同的监测站点。气象监测站的主要功能包括&#xff1…

pnpm--安装与使用

原文网址&#xff1a;pnpm--安装与使用-CSDN博客 简介 本文介绍pnpm的安装与使用。 pnpm由npm/yarn衍生而来&#xff0c;解决了npm/yarn内部潜在的bug&#xff0c;极大的优化了性能&#xff0c;扩展了使用场景&#xff0c;被誉为“最先进的包管理工具”&#xff0c;速度快、…

变量重名情况

变量重名 变量的使用规则&#xff1a;就近原则 第一种情况&#xff1a;局部变量和成员变量重名&#xff0c;使用this关键字访问成员变量 第二种情况&#xff1a;子类成员变量和父类成员变量重名&#xff0c;使用super关键字访问父类成员变量 // 父类 public class Fu {int …