在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 <iostream>
#include <locale>
#include <cstdlib>
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;
}