在编程中,最常用的变量之一是文本字符串,在存储和检索有价值的数据时,它们有时非常重要。 以其语言和本地化安全地存储数据非常重要。 大多数编程语言在存储文本和字母时都有问题。 在C++中,有非常古老的众所周知的字符串类型(字符数组)和现代类型的 标准::basic_string 类型,如 标准::字符串 , 和std::wstring 。除了这些现代字符串类型之外 C++生成器 还有另一个惊人的字符串功能 Unicode字符串 在这篇文章中,我们解释了现代C++中的UnicodeString是什么以及如何实现。
C++中的字符串类型是什么?
一般来说,C++中有3种类型的字母数字字符串声明;
字符数组 (请参见 基本类型 ) 字符是ASCII格式的,这意味着每个字符都有1字节(8位)大小(这意味着您有0到255个字符)
基本字符串 (标准::basic_string) 这个 basic_string(标准::basic_string 和 标准::pmr::basic_string) 是一个类模板,用于存储和操作字母数字字符串对象(char、w_char…)的序列。 基本字符串可用于定义 字符串、wstring、u8string、u16string和u32string 数据类型。
字符串 或 Unicode字符串
The Unicode字符串
字符串类型是默认值 字符串 UTF-16格式的RAD Studio、C++Builder、Delphi类型,这意味着UTF-16中的字符可能是2或4个字节。 在C++Builder和Delphi中; Char和PChar类型现在分别是WideChar和PWideChar。 有一篇关于 RadStudio中的Unicode .
此外,我们以前在C++Builder和Delphi中使用过一些旧的字符串类型,
AnsiString公司 以前 字符串 是AnsiString的别名。对于RAD Studio、C++Builder和Delphi,AnsiStrin的格式已更改。 已添加CodePage和ElemSize字段。 这使得AnsiString的格式与新UnicodeString的相同。
宽字符串 WideStrings以前用于Unicode字符数据。 其格式与Windows BSTR基本相同。WideString仍然适用于COM应用程序。
什么是C++Builder中的UnicodeString(String)?
Unicode码 标准 Unicode字符串 为超过ASCII(8位)字符的每个字符(8、16或32位)提供唯一的数字。 由于支持全球语言和表情符号,UnicodeString被广泛使用。 在当今的现代C++中,使用了两种类型的字符串; 字符数组(字符字符串)和现代字符串,例如 标准::字符串 , 标准::wstring 或 Unicode字符串 (默认类型 字符串 ). 大多数编译器、IDE都在其GUI表单和组件中使用这些新的字符串标准,以支持提供全局应用程序的所有语言。 在C++Builder中,还有其他字符串类型,如WideStrings和AnsiStrings。 它们现在更旧了,不兼容现代编程的所有功能。 可以找到有关Unicode字符串结构的更多信息 在这里 .RAD Studio、Delphi和C++Builder使用基于Unicode的字符串:即类型 字符串 是Unicode字符串( 系统。 Unicode字符串 )而不是ANSI字符串。如果您想将代码转换为Unicode字符串,我们建议您 这篇文章 .
什么是现代C++中的basic_string?
这个 basic_string(标准::basic_string 和 标准::pmr::basic_string) 是一个类模板,用于存储和操作字母数字字符串对象(char、w_char…)的序列。 例如, str::字符串 和 标准::wstring 是由 标准::basic_string<char> 换句话说,basic_string用于定义不同的data_type,这意味着basic_string不仅是字符串,而且是通用字符串格式的命名空间。 基本字符串可用于定义 字符串、wstring、u8string、u16string和u32string 数据类型。
basic_string类既不依赖于字符类型,也不依赖于该类型上操作的性质。 操作的定义通过 特征
模板参数(即std::chartraits的专门化)或兼容的traits类。 这个 基本字符串
连续存储元素。
基本字符串定义提供了几种常用字符类型的字符串类型,如下所示,
字符串类型 基本字符串定义 标准 标准::字符串 标准::basic_string<char> 标准::wstring 标准::basic_string 标准::u8string 标准::basic_string<char8_t> (C++20) 标准::u16string 标准::basic_string<char16_t> (C++11) 标准::u32string 标准::basic_string<char32_t> (C++11)
几种字符串类型 标准::pmr 基本字符串定义也提供了通用字符类型的名称空间。 下面是关于基本字符串类型及其文字的更多详细信息。
请注意,您可以在C++Builder中同时使用std::basic_string(std::string,std::wstring,std::u16string,…)/std::pmr和UnicodeString类型。
如何在C++Builder中使用UnicodeString?
下面是一些现代示例,您可以如何将字符串与UnicodeString类型一起使用,
如何声明Unicode字符串
L(左)
此处为字符串文字,表示 wchar_t型
文字; 在这里 u8型
, u个
和 U型
文字也可以使用。 这些可能是编辑器和/或编译器选项中的默认值,这意味着如果知道默认值,就不需要添加。 字符串文字是由双引号包围的字符序列,可以选择以R、u8、u8R、u、uR、u、uR、L或LR为前缀,如“…”、R“(…)”、u8“…”和u8R“ (…) “,u”…“,uR” ˜(…) 分别是“、U”…“、UR”zzz(…)zzz“、L”…“或LR”(…)“。 请参阅本文档中的字符串文字部分 程序设计语言C标准工作草案++ 。下面我们总结了C++中使用的一些标准。 以下是一些例子,
Unicode字符串 澳大利亚铁路公司 = L(左) " مرحبا" ;
Unicode字符串 铁路运输安全标准2 = 澳大利亚铁路公司 + L(左) “你好” + L(左) “DEF”(排放催化剂) ;
澳大利亚铁路公司 = L(左) "こんにちは" ;
澳大利亚铁路公司 . 打印 ( L(左) “Pi为%8.2f” , 3.14 ) ;
字符串定义的字符串文字示例
str=“abcd”; 基于编译器/IDE选项的默认字符串。
str=u8“abcd”; UTF-8字符串文字,并使用UTF-8编码的给定字符初始化,包括空终止符
str=u“abcd”; char16t字符串文本。 char16_t字符串文字的类型为“array of n const char16_ts”,包括null终止符
str=U“abcd”; char32t字符串文字。 char32_t字符串文字的类型为“array of n const char32 _t”,包括null终止符
str=L“abcd”; 宽字符串文字。 宽字符串文字的类型为“array of n const wchar_t”,包括null终止符
str=R“abcd”; 原始字符串
C中L“”和U“”以及U“”文字的区别是什么++
L基于宽字符串文字依赖于编译器/IDE选项中的n const wchar_t数组。 通常为UTF-8或UTF-16格式
u表示UTF-16格式,
U代表UTF32格式
Unicode字符串的长度
Unicode字符串 澳大利亚铁路公司 = L(左) “ABCDE” ;
整数 长度 = 澳大利亚证券交易委员会 . 长度 ( ) ;
如果 ( 澳大利亚铁路公司 . 长度 ( ) > 45 ) 显示消息 ( L(左) “太长” ) ;
Unicode字符串的大小
Unicode字符串 澳大利亚铁路公司 = L(左) “ABCDEF” ;
整数 大小 = 澳大利亚铁路公司 . 长度 ( ) * 澳大利亚铁路公司 . 单元尺寸 ( ) ;
如何访问/读取Unicode String的字符:
Unicode字符串 澳大利亚铁路公司 = L(左) “ABCDEF” ;
烧焦 中国 = 澳大利亚铁路公司 [ 三 ] ; //Ch现在是整数中的第三个C字符
如何更改Unicode字符串的字符
澳大利亚铁路公司 [ 三 ] = L(左) '九' ; //单个unicode字符
澳大利亚证券交易委员会 [ 三 ] = L(左) '/u1F603' ;
澳大利亚铁路公司 [ 三 ] = 128515 ;
如何在Unicode字符串中查找字符串的位置
Unicode字符串 澳大利亚铁路公司 = “嗨,你好” ;
整数 销售时点情报系统 = 澳大利亚铁路公司 . 销售时点情报系统 ( L(左) “你好” ) ;
如果 ( 澳大利亚铁路公司 . 销售时点情报系统 ( L(左) “你好” ) > 0 ) 显示消息 ( “找到Hello” ) ;
将Unicode字符串转换为整数
Unicode字符串 澳大利亚铁路公司 = L(左) "987" ;
整数 我 = 澳大利亚铁路公司 . ToInt公司 ( ) ;
整数 j个 = 澳大利亚铁路公司 . ToIntDef(到IntDef) ( 0 ) ; //如果不是整数,则设置为0
将Unicode字符串转换为双精度 将Unicode字符串转换为浮点
Unicode字符串 澳大利亚铁路公司 = L(左) "8.45" ;
双重的 我 = 澳大利亚铁路公司 . 到双重 ( ) ;
将Unicode字符串转换为小写
Unicode字符串 澳大利亚铁路公司 = L(左) “这是Unicode” ;
Unicode字符串 铁路运输安全标准2 = 澳大利亚铁路公司 . 小写字母 ( ) ;
将Unicode字符串转换为UpperCase
Unicode字符串 澳大利亚铁路公司 = L(左) “这是Unicode” ;
Unicode字符串 铁路运输安全标准2 = 澳大利亚铁路公司 . UpperCase(大写) ( ) ;
将Unicode字符串转换为字符字符串
Unicode字符串 型钢混凝土 = L(左) “ABC DEF”(ABC排放催化剂) ;
烧焦 * 目的地 = ( ( AnsiString公司 ) 型钢混凝土 ) . c_str码 ( ) ; //我们不能直接使用Unicode的c_str(),我们可以使用AnsiString的c_str()
//也可以在某些编译器中使用
系统 :: Unicode到Utf8 ( 目的地 , 256 , 型钢混凝土 , 型钢混凝土 . 长度 ( ) ) ;
如果您需要转换为低级别(char),这意味着低级别变量需要更高级别(unicode),则不建议从高数字字符转换为低数字字符,否则可能会丢失一些unicode字符,从而导致字符字符串中的字符丢失或错误。
将Unicode字符串转换为ANSI字符串
Unicode字符串 型钢混凝土 = L(左) “这是Unicode” ;
AnsiString公司 目的地 = ( AnsiString公司 ) 型钢混凝土 ;
将Unicode字符串转换为宽字符串
Unicode字符串 澳大利亚铁路公司 = L(左) “这是unicode” ;
宽字元 无线传感器网络 [ 255 ] ;
结构副本 ( wstr公司 , 澳大利亚铁路公司 . 水蒸汽发生器 ( ) ) ;
Unicode字符串的子字符串
Unicode字符串 澳大利亚证券交易委员会 = L(左) “ABCDEF” ;
Unicode字符串 铁路运输安全标准2 = 澳大利亚铁路公司 . 子字符串 ( 5 , 三 ) ;
将字符串插入UnicodeString
Unicode字符串 澳大利亚铁路公司 = L(左) “ABCDEF” ;
澳大利亚铁路公司 . 插入 ( L(左) “-插入-” , 三 ) ;
删除/修剪部分Unicode字符串
Unicode字符串 澳大利亚铁路公司 = L(左) “ABCDEF” ;
Unicode字符串 ust2型 = 澳大利亚铁路公司 . 删除 ( 2 , 4 ) ; //UnicodeString删除(int index,int count)(&D)
比较Unicode字符串 秒
Unicode字符串 澳大利亚铁路公司 = L(左) “ABCDEF” ;
Unicode字符串 澳大利亚铁路公司 = L(左) “AbCdEf” ;
如果 ( 澳大利亚铁路公司 . 比较 ( 铁路运输安全标准2 ) == 0 ) 显示消息 ( “敏感地说,两个字符串是相同的” ) ; //区分大小写
如果 ( 澳大利亚铁路公司 . 比较IC ( 铁路运输安全标准2 ) == 0 ) 显示消息 ( “不敏感两个字符串相同” ) ; //对案件敏感
修剪Unicode字符串中的空格和控制字符
澳大利亚铁路公司 = L(左) “ABC DEF”(ABC排放催化剂) ;
铁路运输安全标准2 = 澳大利亚铁路公司 . 修剪 ( ) ;
有关上述命令和属性的详细信息,请查看 UnicodeString方法和属性 和 UnicodeString类型 从 Unicode字符串 威尔基。
C++生成器 是在Windows操作系统上构建简单或专业应用程序的最简单、最快的C和C++编译器和IDE。 对于初学者来说,它也很容易学习,它有广泛的示例、教程、帮助文件和对代码的LSP支持。 RAD Studio的C++Builder版本附带用于高性能本机Windows应用程序的屡获殊荣的VCL框架和用于UI的强大FireMonkey(FMX)框架。
有一个免费的C++Builder社区版,面向学生、初学者和初创公司; 可以从下载 在这里 。对于专业开发人员,有专业版、架构师版或企业版的C++Builder,也有试用版可从下载 在这里 .