字符匹配新方案——宽字符wchar_t

在c99标准里,增加wchar_t,也就是宽字符,省事了好多有木有,一位宽字符就可以存一个汉字了!


摘自百科:

char是8位 字符类型,最多只能包含256种字符,许多外文 字符集所含的字符数目超过256个,char型无法表示。
wchar_t 数据类型一般为16位或32位,但不同的C或C++库有不同的规定,如GNU Libc规定wchar_t为32位 [1]  ,总之,wchar_t所能表示的 字符数远超char型。
标准C++中的wprintf()函数以及iostream类库中的 类和对象能提供wchar_t 宽字符类型的相关操作。

接下来我们用它写个字符匹配的程序,查找一段文字中各字的出现次数:
//Vs2005以上方可运行
#include 
#include 
#include 

using namespace std;

locale loc("chs");


int main()
{
	wchar_t wStr[] = L"上面通过3个例子介绍了逐步求精的程序设计方法通过这些例子可以看到,逐步求精的方法的最大优点是摆脱了传统的程序设计方法的束缚,按照先全局后局部、先整体后细节、先抽象后具体的过程组织人们的思维活动,使得编写的程序结构清晰、容易阅读、容易修改。同时,还可以结合逐步求精的过程进行程序的正确性验证,即采取边设计、边验证的方法,以简化程序正确性的验证。";

	wchar_t wStr1[200] = L"";//存放字的数组,可以理解成字典
	int Textcount = 0, Dcount = 0;//整段文字的字数   不同字的数目(其实就是前两个数组的长度)
	float count[200] = { 0 };//相应的每个字的个数
	bool exist = false;//判断这个字字典是否存在
	for (int i = 0; i < 200; i++)
	{
		if (wStr[i] == L'\0')
		{
			Textcount = i;
			break;
		}
		for (int m = 0; m < 200; m++)
		{
			if (wStr[i] == wStr1[m])
			{
				count[m]++;
				exist = true;
				break;
			}
			if (wStr[m] == L'\0')
			{
				break;
			}
		}
		if (exist == false)
		{
			wStr1[Dcount] = wStr[i];
			count[Dcount]++;
			Dcount++;
		}
		exist = false;

	}
	wcout.imbue(loc);
	cout << "这段文字是:" << endl;
	wcout << wStr << endl;
	cout << "/" << endl;
	cout << "共有" << Textcount << "个字(包括汉字、数字、字母、标点)" << endl;
	cout << "/" << endl;
	cout << "共有" << Dcount << "个不同的字,字及出现次数如下:" << endl;
	cout << "/" << endl;

	for (int i = 0; i < 100; i++)
	{
		if (count[i] == 0)
		{
			break;
		}
		wcout << wStr1[i] << "字:";
		cout << (int)count[i] << "个" << "  出现频率:" << count[i]*100 / Dcount <<"%"<< endl;

	}
	getchar();
	return 0;
}


你可能感兴趣的:(C++基础)