999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于C語言的字?jǐn)?shù)統(tǒng)計(jì)

2008-12-31 00:00:00湯曉樂
電腦知識(shí)與技術(shù) 2008年34期

摘要:字?jǐn)?shù)統(tǒng)計(jì)是文檔處理中經(jīng)常要用到的功能,這其中要包括英文單詞、數(shù)字和中文等,而且又要和全角或半角的標(biāo)點(diǎn)符號(hào)進(jìn)行區(qū)分,故此在中英文混合文件中進(jìn)行準(zhǔn)確的字?jǐn)?shù)統(tǒng)計(jì)也是有一定難度的。這里提出了一種較好的字?jǐn)?shù)統(tǒng)計(jì)的方法,可以很好的區(qū)分出英文單詞、數(shù)字和漢字,并以C語言為工具進(jìn)行了實(shí)現(xiàn)。

關(guān)鍵詞:字?jǐn)?shù)統(tǒng)計(jì);漢字;標(biāo)點(diǎn)符號(hào);C語言;實(shí)現(xiàn)

中圖分類號(hào):TP312文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)34-2028-02

Word Statistics Based on C

TANG Xiao-le

(Dept. of Computer, Henan Industry Trade Vocational College, Zhengzhou 450012, China)

Abstract: Word statistics is a kind of function which is usually used and it includes English words, digits and Chinese characters, what’s more, it must discriminate single byte punctuation marks from double byte punctuation marks. So it is of some difficulty when counting words accurately in compound files. A method is presented to count word which can separate English words, digits and Chinese words and is realized based on C language.

Key words:word statistics; Chinese character; punctuation marks; C language; realization

1 引言

ASCII是用來表示英文字符的一種編碼規(guī)范,每個(gè)ASCII字符占用1個(gè)字節(jié)(8bits)。因此,ASCII編碼可以表示的最大字符數(shù)是256,其實(shí)英文字符并沒有那么多,一般只用前128個(gè)(最高位為0),其中包括了控制字符、數(shù)字、大小寫字母和其他一些符號(hào)。

中文的文字編碼規(guī)范叫做“GB2312-80”,它是和ASCII兼容的一種編碼規(guī)范,其實(shí)就是把一個(gè)中文字符用兩個(gè)擴(kuò)展ASCII字符來表示。我們必須判斷一個(gè)ASCII碼是否擴(kuò)展,以及它的下一個(gè)ASCII是否擴(kuò)展,然后才“猜”那可能是一個(gè)中文字符。而由于漢字和全角字符都是用兩個(gè)擴(kuò)展ASCII字符來表示,所以還需進(jìn)一步加以區(qū)分。這樣統(tǒng)計(jì)中英文混合文件中的字?jǐn)?shù),也是比較復(fù)雜的,有些軟件也不盡準(zhǔn)確,如微軟Office組件中的Word在對(duì)中文字?jǐn)?shù)統(tǒng)計(jì)時(shí)會(huì)把中文的標(biāo)點(diǎn)符號(hào)也計(jì)算在內(nèi)。

2 基于C語言的字?jǐn)?shù)統(tǒng)計(jì)

本文用C語言來大致描述出如何通過編程來實(shí)現(xiàn)字?jǐn)?shù)統(tǒng)計(jì)功能。均假設(shè)從test.txt文件中得到輸入。所用到的文件指針如下:

FILE *fp;

// 打開文件

if((fp = fopen(\"c:\\\est.txt\", \"r\")) == NULL)

{

printf(\"Can't open file.\");

exit(1);

}

2.1 英文單詞的統(tǒng)計(jì)

對(duì)英文單詞進(jìn)行統(tǒng)計(jì)時(shí),需要考慮它們的ASCII碼即可,主要要分清哪個(gè)字符標(biāo)識(shí)著單詞的開始或結(jié)束,如單詞hello,一旦訪問到字符h就表明進(jìn)入單詞內(nèi)部,直到遇到單詞分隔符如空格、回車等時(shí)認(rèn)為該單詞結(jié)束,將單詞數(shù)加一。簡(jiǎn)要代碼如下:

void countEn(FILE *fp, int *num_e)

{

int word_e = 0; // 英文單詞開始時(shí)設(shè)置 0 標(biāo)記,即在單詞外部

char ch;

while((ch = fgetc(fp)) != EOF)

{

// 判斷是否為字母

if(((ch >= 'a' ch <= 'z') || (ch >= 'A' ch <= 'Z')) word_e == 0)

{

(*num_e)++;

word_e = 1; // 置1表明在單詞內(nèi)部

}

// 如果既不是字母又不是數(shù)字,而且也不小于0的話,即也不是中文字符的話,

// 就視為分隔符

else if((ch > 0 ch < 48) || (ch > 57 ch < 65)

|| (ch > 90 ch < 97) || (ch > 122 ch < 128))

word_e = 0;// 表明在單詞外部

}}

2.2 數(shù)字的統(tǒng)計(jì)

對(duì)數(shù)字進(jìn)行統(tǒng)計(jì)時(shí),也需要考慮它們的ASCII碼,要分清哪個(gè)字符標(biāo)識(shí)著數(shù)字的開始或結(jié)束,如1000,一旦訪問到字符1就表明進(jìn)入數(shù)字內(nèi)部,直到遇到分隔符如空格、回車等時(shí)認(rèn)為該數(shù)字結(jié)束,將數(shù)字?jǐn)?shù)目加一。由于可能存在小數(shù),如10.01,如果遇到“.”,還需要判斷它的下一個(gè)字符是不是為數(shù)字,如果不是則這個(gè)數(shù)字才被認(rèn)為結(jié)束。簡(jiǎn)要代碼如下:

void countDigit(FILE *fp, int *num_d)

{

int word_d = 0;//數(shù)字開始時(shí)設(shè)置 0 標(biāo)記,如1000,即在數(shù)字外部

char ch;

while((ch = fgetc(fp)) != EOF)

{

if((ch >= '0' ch <= '9') word_d == 0)

{

(*num_d)++;

word_d = 1;

}

// 如果既不是字母又不是數(shù)字,而且也不小于0的話,就視為分隔符

else if((ch > 0 ch < 46) || ch == 47 || (ch > 57 ch < 65)

|| (ch > 90 ch < 97) || (ch > 122 ch < 128))

word_d = 0;

}

// 把小數(shù)點(diǎn)看成數(shù)的一部分,如1.55,“.”的ASCII碼值為46

else if(ch == 46 )

{

ch = fgetc(fp);

// 如果“.”之后不再為數(shù)字,則認(rèn)為數(shù)字結(jié)束,將word_d置為0

if(!((ch >= '0' ch <= '9') word_d == 1))

word_d = 0;

}}}

2.3 漢字的統(tǒng)計(jì)

由于漢字由兩個(gè)字節(jié)來描述,其內(nèi)碼范圍為 B0A0~F7A0,而中文標(biāo)點(diǎn)符號(hào)內(nèi)碼的高字節(jié)為A1,所以只要區(qū)分高字節(jié)的不同,就可以區(qū)分開漢字和標(biāo)點(diǎn)了。也就是說,如果一個(gè)字節(jié)大于B0,則意味著有可能是中文漢字,如果下一字節(jié)仍然大于A0,那么這必然是一個(gè)漢字,字?jǐn)?shù)加一,否則不予處理。直到文件讀取結(jié)束。簡(jiǎn)要代碼如下:

void countCN(FILE *fp, int *num_c)

{

char ch;

while((ch = fgetc(fp)) != EOF)

{

// 漢字的內(nèi)碼范圍為 B0A0~F7A0

if(ch < 0)

{

if(((int)ch 0xff) >= 0xB0)

{

ch = fgetc(fp);

if(((int)ch 0xff) >= 0xA0)

(*num_c)++;

}

// 直接讀入漢字的第二個(gè)字節(jié)

else

ch = fgetc(fp);

}}}

3 結(jié)論

對(duì)文檔進(jìn)行字?jǐn)?shù)統(tǒng)計(jì),這在很多場(chǎng)合下均有應(yīng)用,而由于中英文編碼的不同,統(tǒng)計(jì)混合文件中的字?jǐn)?shù)也是比較復(fù)雜的,本文的方法具有較好的健壯性,可以用任何一種編程語言實(shí)現(xiàn)或者移植到其它應(yīng)用程序當(dāng)中。

參考文獻(xiàn):

[1] 吳征.在Delphi中實(shí)現(xiàn)中英文字?jǐn)?shù)統(tǒng)計(jì)[J].電腦迷,2004(3):72.

[2] 于鴻霞.統(tǒng)計(jì)與規(guī)則相結(jié)合的中英文組塊分析[D].哈爾濱:哈爾濱工業(yè)大學(xué),2006.

[3] 李德明.計(jì)算機(jī)漢字內(nèi)碼評(píng)析[J].印刷雜志,1997(5).

主站蜘蛛池模板: 久久综合色天堂av| 久青草免费在线视频| 国产成人亚洲精品色欲AV| 91精品专区国产盗摄| 国产99视频精品免费观看9e| 久无码久无码av无码| 538国产在线| 国产在线一区二区视频| A级毛片无码久久精品免费| 日本一区高清| 亚洲天堂伊人| 黄色一及毛片| 成人日韩视频| 精品国产免费人成在线观看| 午夜免费视频网站| 美女一级免费毛片| 亚洲首页在线观看| 精品91自产拍在线| 一级做a爰片久久免费| 爆乳熟妇一区二区三区| 欧美日韩午夜| 欧美激情第一欧美在线| a级毛片一区二区免费视频| 国产高清色视频免费看的网址| 国产精品美女网站| 久久久波多野结衣av一区二区| 亚洲欧美另类久久久精品播放的| 国产91在线|中文| 中文成人在线| 欧美成人午夜视频| 日韩精品毛片| 国产无吗一区二区三区在线欢| 国产成人精品亚洲77美色| 日韩中文欧美| 色综合天天娱乐综合网| 午夜人性色福利无码视频在线观看| 久久综合亚洲鲁鲁九月天| 强乱中文字幕在线播放不卡| 国内精品久久人妻无码大片高| 99久视频| 欧美第一页在线| av手机版在线播放| 亚洲精选高清无码| 国产一级视频久久| 亚洲中文字幕97久久精品少妇| 久久福利片| 毛片大全免费观看| 亚洲福利视频网址| 欧洲成人在线观看| 日韩毛片免费观看| 青草精品视频| 高清码无在线看| 国产香蕉97碰碰视频VA碰碰看| 亚洲欧美成人影院| 午夜视频www| 四虎精品黑人视频| 国产福利在线免费观看| 亚洲va在线∨a天堂va欧美va| 五月婷婷伊人网| 亚洲一区二区黄色| 欧美一区二区福利视频| 国产极品美女在线| 亚洲综合久久一本伊一区| 热热久久狠狠偷偷色男同| 九色综合视频网| 久久96热在精品国产高清| 国产区人妖精品人妖精品视频| 四虎影视库国产精品一区| 欧美日韩国产成人在线观看| 亚洲男人的天堂网| 国产免费精彩视频| 亚洲一区二区在线无码| 国产精品不卡片视频免费观看| 国产欧美在线观看精品一区污| 高清国产在线| 69视频国产| 亚洲精品日产AⅤ| 久久香蕉国产线看观看精品蕉| 欧美国产日产一区二区| 香蕉网久久| 久久国产高潮流白浆免费观看| 中文字幕无码制服中字|