c++|wcout输出中文——统计字符串中字符数目

#include "stdafx.h" #include // std::cout #include// std::partial_sort #include #include #include //std::pair //博客原文地址https://blog.csdn.net/oyhb_1992/article/details/80236938 std::map map1; void fun(const wchar_t& c) { if (map1[c] == 0) //map1.insert(std::pair(c, 1)); map1[c] = 1; else map1[c] += 1; } int main() { std::wcout.imbue(std::locale("chs")); std::wstring str = L"Pascal字符串在形式语言范畴中定义为一个字母表(有限字符集合)中的有限个字符的有序集合。" "Pascal通常所说的字符串,除了这个基本含义以外,还包含了它的表示形式。" "由于字符能在计算机中以一个整数表示,对于每个字符占用空间相同的情" "况下(等宽字符串),用能够存放表示字符的整数的连续空间来保存字符" "串,同时使用长度或结束标志符信息。按宽度分,常用窄字符串(字符为" "1个字节,编码通常为ANSI,可以通过约束字符的值等方式扩展为不定宽" "度的MBCS(多字节字符串),例如中文系统中常用的ANSI + GBK),以" "及宽字符串(最常用的宽字符编码是Unicode,因此一般是指Unicode字符串)。" "C \/ C++中对于等宽字符串使用数组或字符指针指针来引用,字符串结尾处加上每一位全部为0的字" " 符'\\0'(数值上等于整数0搜索)标识,这种表示形式称为C风格字符串(C - style string)。" "最常用的字符串是指C - style字符串中,字符用char储存的版本,即C - style窄字符串。" "对于宽字符串,C \/ C++标准规定用wchar_t表示这个字符(宽度和字节序取决于实现,例如M" "ac平台下的工具中是2字节,对应编码UTF - 16BE; Windows平台下的通常是2字节," "对应编码UTF - 16LE; GCC支持的是4字节,对应UTF - 32,能放下所有Unicode字符)," "wchar_t数组或wchar_t指针是对应的字符串表示形式。C++标准库中用char或wchar_t字符" "串封装为std::string和std::wstring类,也是常见的实现方式。此外,还有Pascal中起" "始保存长度的字符数组等形式;以及一些字符串库中专用于处理非等宽字符串(例如UTF - " "8编码)等的表示形式。这些数据结构通常也称为字符串。" "最后,具体到类C语言的语法上,包含了被作为字符串的字符的" "编译期符号"",称为字符串字面量(内存布局和表示C - style窄" "字符串的char数组相同),也是通常所说的字符串。宽字符串字面量用L""表示(内存" "布局同表示C - style宽字符串的wchar_t数组)。而字符常量用''和L''引用对引的字符来表示"; std::for_each(str.begin(), str.end(), fun); std::map::const_iterator it; for (it = map1.cbegin(); it != map1.cend(); it++) { std::wcout << it->first << ""<second << '\n'; //std::cout <second << '\n'; } return 0; }

【c++|wcout输出中文——统计字符串中字符数目】输出结果
1 27 '6 (1 )1 +7 -9 /2 03 13 23 31 41 62 81 :4 ; 2 A2 B3 C15 E2 F4 G2 I2 K1 L3 M2 N2 P3 S3 T4 U7 W1 \1 _5 a15 c15 d6 e8 g3 h8 i7 l8 n7 o4 r11 s14 t15 w7 y5 。12 一5 上3 下4 不1 专1 个7 中11 串26 为10 义2 也3 了3 于7 些2 以5 位1 体1 作1 使2 例3 保2 信1 值2 储1 全1 具2 内2 决1 况1 准2 分1 到1 加1 包2 占1 即1 及2 取1 可1 台2 号1 合2 同4 后1 含3 和4 因1 在2 基1 处2 外2 多1 够1 如3 始1 字52 存6 它1 定3 实2 宽11 对8 封1 尾1 局2 展1 工1 布2 常11 平2 序2 库2 应4 度5 式8 引3 形6 志1 息1 情1 或4 所3 扩1 持1 指5 按1 据1 搜1 支1 放2 数10 整3 文1 方2 时1 是9 最3 有5 期1 本2 机1 束2 来3 构1 标4 格1 此2 母1 每2 法1 版1 现2 理1 用16 由1 畴1 的28 相2 码5 示11 种1 称3 空2 窄3 符45 等7 算1 类2 系1 索1 约1 组5 结3 统1 续1 编6 而1 能3 般1 节6 范1 表12 被1 装1 见1 规1 言2 计1 识1 译1 语3 说2 起1 过1 还2 这4 连1 通6 部1 量3 针3 长2 间2 限2 除1 集2 非1 面2 风1 (10 )10 ,28 ;1

总结:
1:必须用std::wstring str = L"P..."; 不能用std::string str="P..."; 否则输出的就是w_chart对应的整形数值
2:需要用wcout输出中文std::wcout << it->first
3:将控制台语言环境设置成显示中文

    推荐阅读