宽字符相关的输入输出

https://blog.atime.me/note/cpp-wchar.html

前一段时间写 GPA 计算器时需要处理宽字符串。初次接触宽字符遇到不少问题,最后通过查找资料都已解决,特记录于此以作备忘之用。

环境:Visual Studio 2005(ch), win32

与宽字符相关的输入输出

标准输入与输出

需包含 iostream 头文件,对于中文的输入输出建议包含 locale 头文件,并设置 locale 为“chs”。标准输入流为 wcin ,标准输出流为 wcout ,标准错误流为 wcerr 。

#include <iostream>
#include <locale>
// ...

wcin.imbue(locale("chs"));
wcout.imbue(locale("chs"));

wcin >> // wstring
wcout << // wstring

// ...

文件输入与输出

相应的输入输出流换为 wifstream 和 wofstream 。

#include <fstream>
#include <locale>
#include <string>
// ...

void fun(string _flname) {
    wifstream wif(_flname.c_str());
    wif.imbue(locale("chs"));
    wstring wsline(L""); // L必需

    while (getline(wif, wsline)) // wif 与 wsline 的字符类型应相同,同为 char 或同为 wchar_t 。
    // ...

    wif.close();
}
// ...

wstringstream 流

建议进行类型转换时,使用 wstringstream 流。

#include <stringstream>
#include <locale>
// ...

wstringstream wssm;
int ivar;
double dvar;

wssm.imbue(locale("chs"));

wssm << L"123" << L" " << L"3.14159";
wssm >> ivar >> dvar;

// 由于 wssm 已到达末尾,如需继续转换,务必重置流状态为正常
/* wssm.clear();
* wssm << // ...
* wssm >> // ...
* // ...
*/

// ...

其它

wstring 类函数

使用 string 类的函数,注意字符类型为 wchar_t,相应的指针类型为 wchar_t* 。

时间: 2024-12-31 10:25:53

宽字符相关的输入输出的相关文章

KVM(多电脑切换器)

KVM:Keyboard Video Mouse的缩写.KVM 交换机通过直接连接键盘.视频和鼠标 (KVM) 端口,让您能够访问和控制计算机.KVM 技术无需目标服务器修改软件.这就意味着可以在 Windows 的 BIOS 环境下,随时访问目标计算机.KVM 提供真正的主板级别访问,并支持多平台服务器和串行设备.KVM 技术已经从最初的基础SOHO办公型,发展成为企业 IT 基础机房设施管理系统.可以从kvm 客户端管理软件轻松的直接访问位于多个远程位置的服务器和设备.KVM over IP

Altera FFT核使用详解

简介 快速傅里叶变换(Fast Fourier Transform)最为一种高效的算法,被广泛的用于信号处理与数据分析等领域.对于设计工程师来讲,自己动手采样可编程语言来实现一个FFT/IFFT模块,不知要花费多少心血.所幸的是Altera和Xilinx两大巨头都提供了自己FFT核,本文将详细讲解如何使用Altera的FFT核. Altera FFT核 FFT IP core的总体架构分析:FFT分为fixed transform size architectture 和 variable st

带宽和网速之间的关系

先明白一下几个网络速度量词单位之间的关系: 1 Byte = 8 bits 1 Kb = 1024 bits 1 KB = 1024 bytes 1 Mb = 1024 Kb 1 MB = 1024 KB 1.Mbps是带宽单位,在“Mbps”单位中的“b”是指“Bit(位)”.带宽是按位来描述的. 2.MB/s为速度单位,在“MB/s”中的“B”是指“Byte(字节)”.因为数据是按字节传输的. 3.所谓 1M 宽带,其实是指 1Mbps (兆比特每秒),亦即 1 x 1024 / 8 = 1

存储、中断、总线及输入输出系统

存储系统的基本要求: 大容量,高速度和低价格. 访问时间: 存储器从接到访存读申请,到信息被读到数据总线上所用的时间 存储周期: 连续启动一个存储体所需的时间间隔 频宽: 每秒传输的信息位数 并行主存系统: 能并行读取多个CPU字的单体多字.多体单字或多体多字的交出存储主存系统 并行主存频宽: 主存频宽与分体数m.转移概率λ的关系 中断分类: 机器校验中断 访管中断 程序性中断 外部中断 I/O中断 重新启动中断 总线: 总线是用于互连计算机.CPU.存储器.I/O端口及外部设备.远程通信设备间

shu_1171 十-&gt;二进制转换(输入输出控制)

http://202.121.199.212/JudgeOnline/problem.php?cid=1079&pid=19 分析:主要是输出格式控制 "对于每个n,以11位的宽度右对齐输出n值": 即包括该数在内一共11位,右对齐为printf的默认方式,所以用 %11d  来解决. 另外, 输出左对齐与右对齐,需在指定输出长度的时候才有意义: 如无指定长度,则输出从行首开始,有多长输出多长: 左对齐: %-11d 实例: #include <stdio.h> i

【NOIP2016提高组】愤怒的小鸟(状压宽搜)

题目描述 Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形如的曲线,其中a,b是Kiana指定的参数,且必须满足a<0. 当小鸟落回地面(即x轴)时,它就会瞬间消失. 在游戏的某个关卡里,平面的第一象限中有n只绿色的小猪,其中第i只小猪所在的坐标为(xi,yi). 如果某只小鸟的飞行轨迹经过了(xi,yi),那么第i只小猪就会被消灭掉,同时小鸟将会沿着原先

网易云课堂_C语言程序设计进阶_第七周:文件:文件访问、格式化输入输出、二进制输入输出

格式化的输入输出 printf %[flags][width][.prec][hIL]type Flag 含义 - 左对齐 + 在前面放+或- (space) 正数留空 0 0填充 1 #include <stdio.h> 2 3 void main() 4 { 5 printf("%+9d\n", 123); 6 7 printf("%9d\n", 123); 8 9 printf("%-9d\n", 123); 10 11 pri

C++:流类库与输入输出

7.2.1 C++的输入输出流 ios:流基类(抽象类) istream:通用输入流类和其他输入流的基类 ostream:通用输出流类和其他输出类的基类 iostream:通用输入输出流类和其他输入输出流类的基类(以下的派生类对象有cin.cout.cerr.clog) ifstream:输入文件流类 ofstream:输出文件流类 fstream:输入输出文件流 istrstream:输入字符串流类 ostrstream:输出字符串流类 strstream:输入输出字符串类 iostream_

C语言学习(二)——字符串和格式化输入输出

C语言学习(二)——字符串和格式化输入输出 1.char数组类型和空字符 C没有为字符串定义专门的变量类型,而是把它存储在char数组里.数组的最后一个位置显示字符\0.这个字符就是空字符,C用它来标记字符串的结束,其ASCII码的值为(或者等同于)0.C的字符串存储时通常以这个空字符结束,该字符的存在意味着数组的单元数必须至少比要存储的字符数多1.计算机可以自己处理大多数这些细节问题(例如,scanf( )会添加'\0'使得数组内容成为C字符串). 2.strlen( )函数与sizeof运算