C++11新特性:字符串数据类型解析

需积分: 10 0 下载量 121 浏览量 更新于2024-09-15 1 收藏 279KB PDF 举报
"C++11引入了新的字串数据类型,包括char16_t和char32_t,用于处理UTF-16和UTF-32编码,以支持更广泛的字符集。此外,还介绍了string、wstring、u16string和u32string,以及在处理字符串时需要注意的事项,如使用L""前缀、I/O流的选择和设置locale。" 在C++11标准中,字串数据类型的扩展是语言现代化的重要部分,它提升了C++处理各种字符编码的能力。传统的C++使用`char`类型处理ASCII编码,而`wchar_t`则用于处理更广泛的UTF编码,如中文。然而,C++11进一步引入了`char16_t`和`char32_t`,分别对应UTF-16和UTF-32编码,这两种编码能够表示Unicode字符集中的所有字符。 `std::string`仍然是处理ASCII或类似编码(如GB2312、Big5)的英文文本的主要选择,但也可以用于处理其他编码,尽管可能会导致乱码。`std::wstring`是一个宽字符字符串,它通常用于处理UTF编码,但其编码方式依赖于操作系统,如Windows上通常是UTF-16,而在其他系统中可能是UTF-32。 对于需要处理UTF-16编码的场景,可以使用`std::u16string`,而`std::u32string`则用于处理UTF-32编码。这些新类型提供了与`std::string`相似的功能,它们都源自`std::basic_string`模板类。 在使用`wstring`时,有几点需要注意: 1. 使用`L""`前缀:当向`wstring`变量赋值时,即使字符串是英文,也应该在双引号前加上`L`,以表明这是宽字符字符串,如`wstrings1 = L"Hello"; wstrings2 = L"例题";` 2. I/O流选择:`wcout`、`wcin`和`wcerr`是与`wstring`对应的输入/输出流,因此在输出`wstring`变量时,必须使用`wcout`,而不是`cout`。 3. 设置`locale`:在使用`wcout`进行输出之前,可能需要调用`setlocale`函数,以确保正确的字符编码和显示。 以下是一个简单的示例,展示了如何设置locale并使用`wcout`输出`wstring`: ```cpp #include <string> #include <iostream> #include <locale> int main() { std::locale::global(std::locale("")); std::wstring ws = L"你好,世界!"; std::wcout << ws << std::endl; return 0; } ``` 在这个例子中,`std::locale::global(std::locale(""))`会将全局locale设置为空,这样`wcout`就能正确地处理本地化的宽字符字符串。 除了内置的字符串类型,还可以考虑使用ICU库(International Components for Unicode),这是一个跨平台的库,提供了丰富的国际化和本地化功能,包括字符串转换和正则表达式处理。然而,使用ICU需要额外安装,并且某些情况下,如Boost库的二进制版本,可能不包含对ICU的直接支持,需要从源代码编译。 C++11的字串数据类型扩展为开发者提供了更强大的工具,以处理不同编码的文本,同时需要注意在不同环境下正确使用这些类型以及相关的I/O操作。

从键盘输入一个长度不超过100个字符的字符串,然后做如下操作: (1)将字串中的小写字母转为大写,大写字母转为小写,而其它字符不作处理。(2)将字串输出保存到一个名为“ex801.txt”的文本文件中。注:文本文件ex801.txt应与源码文件ex801.c保存在同一个文件夹中。目前,已编写完成main函数,请用C++编程实现writeToFile函数,具体功能和要求如下所示。/* @Filename: ex801.c @Author: 鞠成东 @Version: 1.0 @Date: 2021-03-18 @Description: 文件字符读写 / #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc,char argv[]){ /(1)声明函数及变量/ int writeToFile(char str, char fileName, char mode); char str[100]; char fileName[] = “ex801.txt”; /(2)获取键盘输入字串/ fgets(str, 100, stdin);得到(str);将回车看作字串输入结束标志,字串中可以有空格 //scanf(“%s”, str);将空格看作字串输入结束标志,字串中不能有空格 /(3)将字串写入文件*/ int charNum = writeToFile(str, fileName, “w”);if(charNum < 0){ //printf(“write error”);//用于调试 return -1; } return 0;} /* * 函数名称:writeToFile * 函数功能:将字串写入文件 * 形式参数:char *str,一维字符数组(字符串)首地址 * 形式参数:char *fileName,待写入的文件路径及名称 * 形式参数:char *mode,文件使用方式 * 返 回 值:int型,若文件打开异常,返回 -1;否则返回写入到文件的字符数 */ int writeToFile(char *str, char *fileName, char *mode){ // 请编程实现本函数 } 其他说明:无 【源文件名】ex801.c 【输入形式】标准输入:从键盘任意输入不超过100个字符的字串 【输出形式】文件输出:将字串转换后输出到文件

2023-05-24 上传