自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C++中文字符相關(guān)應(yīng)用方法詳解

開發(fā) 后端
C++中文字符的處理相比英文處理來說是比較復(fù)雜的一個(gè)操作。在這篇文章中,我們將會(huì)為大家詳細(xì)講解一下相關(guān)的操作方法。

C++編程語(yǔ)言應(yīng)用方式靈活,可以幫助開發(fā)人員輕松的實(shí)現(xiàn)許多功能需求。今天為大家介紹的C++中文字符的相關(guān)處理,就可以以多種方式來實(shí)現(xiàn)。大家可以通過這一方法來充分掌握這方面的應(yīng)用技巧。#t#

一 引入問題

代碼 wchar_t a[3]=L”中國(guó)”,編譯時(shí)出錯(cuò),出錯(cuò)信息為:數(shù)組越界。但wchar_t 是一個(gè)寬字節(jié)類型,數(shù)組a的大小應(yīng)為6個(gè)字節(jié),而兩個(gè)漢字的的unicode碼占4個(gè)字節(jié),再加上一個(gè)結(jié)束符,最多6個(gè)字節(jié),所以應(yīng)該不會(huì)越界。難道是編譯器出問題了?

二 解決引入問題所需的知識(shí)

主要需兩方面的知識(shí),第一個(gè)為字符尤其是漢字的編碼,以及語(yǔ)言和工具的支持情況,第二個(gè)是vc/c++中MutiByte Charater Set 和 Wide Character Set有關(guān)內(nèi)存分配的情況.

三 漢字的編碼方式及在vc/c++中的處理

1.漢字編碼方式的介紹

對(duì)英文字符的處理,7位ASCII碼字符集中的字符即可滿足使用需求,且英文字符在計(jì)算機(jī)上的輸入及輸出也非常簡(jiǎn)單,因此,英文字符的輸入、存儲(chǔ)、內(nèi)部處理和輸出都可以只用同一個(gè)編碼(如ASCII碼)。

而在C++中文字符處理中,漢字是一種象形文字,字?jǐn)?shù)極多(現(xiàn)代漢字中僅常用字就有六、七千個(gè),總字?jǐn)?shù)高達(dá)5萬(wàn)個(gè)以上),且字形復(fù)雜,每一個(gè)漢字都有"音、形、義"三要素,同音字、異體字也很多,這些都給漢字的的計(jì)算機(jī)處理帶來了很大的困難。要在計(jì)算機(jī)中處理漢字,必須解決以下幾個(gè)問題:首先是漢字的輸入,即如何把結(jié)構(gòu)復(fù)雜的方塊漢字輸入到計(jì)算機(jī)中去,這是漢字處理的關(guān)鍵;其次,漢字在計(jì)算機(jī)內(nèi)如何表示和存儲(chǔ)?如何與西文兼容?最后,如何將漢字的處理結(jié)果從計(jì)算機(jī)內(nèi)輸出?

為此,必須將漢字代碼化,即對(duì)漢字進(jìn)行編碼。對(duì)應(yīng)于上述漢字處理過程中的輸入、內(nèi)部處理及輸出這三個(gè)主要環(huán)節(jié),每一個(gè)漢字的編碼都包括輸入碼、交換碼、內(nèi)部碼和字形碼。在計(jì)算機(jī)的漢字信息處理系統(tǒng)中,處理漢字時(shí)要進(jìn)行如下的代碼轉(zhuǎn)換:輸入碼→交換碼→內(nèi)部碼→字形碼。

(1)輸入碼: 作用是,利用它和現(xiàn)有的標(biāo)準(zhǔn)西文鍵盤結(jié)合來輸入漢字。輸入碼也稱為外碼。主要?dú)w為四類:

a) 數(shù)字編碼:數(shù)字編碼是用等長(zhǎng)的數(shù)字串為漢字逐一編號(hào),以這個(gè)編號(hào)作為漢字的輸入碼。例如,區(qū)位碼、電報(bào)碼等都屬于數(shù)字編碼。

b) 拼音碼:拼音碼是以漢字的讀音為基礎(chǔ)的輸入辦法。

c) 字形碼:字形碼是以漢字的字形結(jié)構(gòu)為基礎(chǔ)的輸入編碼。例如,五筆字型碼(王碼)。

d) 音形碼:音形碼是兼顧漢字的讀音和字形的輸入編碼。

(2)交換碼:用于漢字外碼和內(nèi)部碼的交換。交換碼的國(guó)家標(biāo)準(zhǔn)代號(hào)為GB2312-80。

(3)內(nèi)部碼:內(nèi)部碼是漢字在計(jì)算機(jī)內(nèi)的基本表示形式,是計(jì)算機(jī)對(duì)漢字進(jìn)行識(shí)別、存儲(chǔ)、處理和傳輸所用的編碼。內(nèi)部碼也是雙字節(jié)編碼,將國(guó)標(biāo)碼兩個(gè)字節(jié)的最高位都置為"1",即轉(zhuǎn)換成漢字的內(nèi)部碼。

(4)字形碼:字形碼是表示漢字字形信息(漢字的結(jié)構(gòu)、形狀、筆劃等)的編碼,用來實(shí)現(xiàn)計(jì)算機(jī)對(duì)漢字的輸出(顯示、打?。?/p>

2.VC中漢字的編碼方式

C++中文字符的處理正是采用了GB2312內(nèi)部碼作為漢字的編碼方式,因此vc/c++中的各種輸入輸出方法,如cin/wcin,cout/wcout,scanf/wsanf,printf/wprintf...都是基于GB2312的,如果漢字的內(nèi)碼不是這種編碼方式,那么利用上述各種方法就不會(huì)正確的解析漢字。

仔細(xì)觀察ASCII字符表,從第161個(gè)字符開始,后面的字符并不經(jīng)常為用戶所使用,負(fù)值也未使用。GB2312編碼方式充分利用這一特性,將161-255(-95~-1)之間的數(shù)值空間作為漢字的標(biāo)識(shí)碼。既然255-161 = 94不能滿足漢字容量的要求,就將每?jī)蓚€(gè)字符并在一塊(即一個(gè)漢字占兩個(gè)字節(jié)),顯然,94* 94 =8836基本上已經(jīng)滿足了常用漢字個(gè)數(shù)的要求。計(jì)算機(jī)處理字符時(shí),當(dāng)連續(xù)處理到兩個(gè)大與160(或-95~-1)的字節(jié)時(shí),就認(rèn)為這兩個(gè)字節(jié)存放了一個(gè)漢字字符??梢杂孟旅娴腄emo程序來模擬vc/c++中輸出漢字字符的過程。

  1. unsigned char input[50];  
  2. cin>>input;  
  3. int flag=0;  
  4. for(int i =0 ;i < 50 ;i++)  
  5. {  
  6. if(input[i] > 0xa0 && input[i] != 0)  
  7. {  
  8. if(flag == 1)  
  9. {  
  10. cout<<"chinese character"<<endl;  
  11. flag = 0;  
  12. }  
  13. else  
  14. {  
  15. flag++;  
  16. }  
  17. }  
  18. else if(input[i] == 0)  
  19. {  
  20. break;  
  21. }  
  22. else   
  23. {  
  24. cout<<"english character"<<endl;  
  25. }  

輸入:Hello中國(guó) (“中國(guó)”對(duì)應(yīng)的GB2312內(nèi)碼為:214 208,185 250),輸出:

  1. english character  
  2. english character  
  3. english character  
  4. english character  
  5. english character  
  6. chinese character  
  7. chinese character 

vc/c++中的英文字符仍然采用ASCII編碼方式??梢栽O(shè)想,其他國(guó)家程序員利用vc/c++編寫程序輸入本國(guó)字符時(shí),vc/c++則會(huì)采用該國(guó)的字符編碼方式來處理這些字符。問題又產(chǎn)生了,韓國(guó)的vc/c++程序在中國(guó)的vc/c++上運(yùn)行時(shí),如果沒有相應(yīng)的內(nèi)碼庫(kù),則對(duì)韓語(yǔ)字符的顯示有可能出現(xiàn)亂碼。

我個(gè)人猜測(cè),vc安裝程序中應(yīng)該帶有不同國(guó)家的內(nèi)碼庫(kù),這樣一來肯定會(huì)占用很大的空間。如果所有的國(guó)家使用統(tǒng)一的編碼方式,且所有的程序設(shè)計(jì)語(yǔ)言和開發(fā)工具都支持這種編碼方式該多好!而現(xiàn)實(shí)中,確實(shí)已經(jīng)有這種編碼方式了,且許多新的語(yǔ)言也都支持這種編碼方式,如Java、C#等,它就是下面的Unicode編碼。

以上就是對(duì)C++中文字符的相關(guān)概念介紹。

責(zé)任編輯:曹凱 來源: 博客園
相關(guān)推薦

2024-03-11 06:05:00

C++字符串

2010-03-05 16:09:44

Python中文字符

2011-01-11 10:05:29

Linux中文字體

2009-11-26 16:43:11

PHP截取中文字符串

2010-02-01 17:31:06

C++類成員

2011-06-16 17:01:21

Qt MeeGo 排序

2010-02-01 10:43:10

C++跨平臺(tái)應(yīng)用

2009-11-26 16:26:32

PHP字符串mbstr

2010-02-01 15:59:09

C++逗號(hào)操作符

2010-02-05 15:51:06

C++ explici

2010-02-01 16:46:07

C++格式化字符串

2009-12-03 10:09:36

linux添加字體中文字體

2011-03-30 17:20:18

C++引用

2024-04-01 09:13:20

C++函數(shù)遞增

2009-12-01 15:41:16

PHP substr截

2009-11-27 09:55:11

PHP截取中文字符

2010-02-02 18:01:47

C++字符串替換函數(shù)

2010-02-03 17:06:36

C++對(duì)象復(fù)制

2010-02-05 13:44:06

C++ eof()函數(shù)

2021-04-13 14:36:00

鴻蒙HarmonyOS應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)