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;
}

输出结果

             1
      27
'     6
(     1
)     1
+     7
-     9
/     2
0     3
1     3
2     3
3     1
4     1
6     2
8     1
:     4
;     2
A     2
B     3
C     15
E     2
F     4
G     2
I     2
K     1
L     3
M     2
N     2
P     3
S     3
T     4
U     7
W     1
\     1
_     5
a     15
c     15
d     6
e     8
g     3
h     8
i     7
l     8
n     7
o     4
r     11
s     14
t     15
w     7
y     5
。     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:将控制台语言环境设置成显示中文

你可能感兴趣的:(c++,随写)