CPinyin unicode汉字查找拼音(支持多音字)

这篇博客介绍了如何使用CPinyin库结合Unicode来查找汉字的拼音,特别强调了对多音字的支持,适合于需要处理中文拼音的开发者。
摘要由CSDN通过智能技术生成
下载代码
---------------------------------------------------------------------------------
虽然很笨的办法,却非常有效
---------------------------------------------------------------------------------
Pinyin.h
---------------------------------------------------------------------------------
#pragma once

class CPinyin
{
public:
	CPinyin(void);
	~CPinyin(void);
private:
	CStringArray	m_pyDataArray;
	CString			m_DataFileName;
	bool			m_isLoad;
	
public:
	bool LoadData(void);
	bool LoadData( CString strFileName );
	CString toPinyin(CString szHanzi, int iMode=0, CString szSplit=_T(" "), CString szDuoyinziSplit=_T(",") );
};
---------------------------------------------------------------------------------
Pinyin.cpp
---------------------------------------------------------------------------------
#include "StdAfx.h"
#include "Pinyin.h"
CPinyin::CPinyin()
{
	m_DataFileName = _T("PinYinData_Unicode.txt");
	LoadData();
}

CPinyin::~CPinyin()
{
	m_pyDataArray.RemoveAll();
}

bool CPinyin::LoadData( CString strFileName )
{
	m_DataFileName = strFileName;
	return LoadData();
}

bool CPinyin::LoadData(void)
{
	CFile		f;
	CString		str		= _T("");
	int			i		= 0;
	int         icnt	= 0;
	m_isLoad			= false;

	m_pyDataArray.RemoveAll();
	if( f.Open( m_DataFileName , CFile::modeRead ) )
	{
		f.Seek( 2L, CFile::begin); //unicode text file keep FF FE
		UINT size = (UINT)f.GetLength()-2;
		TCHAR *pData = (TCHAR *)malloc( size );
		if( pData != NULL ) 
		{
			f.Read( pData, size);
			while(AfxExtractSubString(str,pData,i,','))
			{
				++i;
				if( str.GetLength() > 0 )
				{
					str.Replace(_T(" "),_T(""));
					str.Replace(_T("\r\n"),_T(""));
					m_pyDataArray.Add ( str );
					icnt ++;
				}
			}
			free( pData );
		}
		f.Close();
	}
	if( icnt > 0 ) m_isLoad = true;
	return m_isLoad;
}

//iMode 0 不显示多音字
//      1 显示多音字
CString CPinyin::toPinyin(CString szHanzi, int iMode, CString szSplit, CString szDuoyinziSplit )
{
	int i = 0, j = 0, p1 = 0;
	CString strPY = _T(""), str, strOneLine, strTmp, strHZData = _T("");
	int iLen = szHanzi.GetLength();
	if( iLen <= 0 ) return _T("");
	if( !m_isLoad ) return _T("");
	
	for( i = 0; i < iLen; i++)
	{
		str = szHanzi.Mid(i,1);
		int iduoyingzi = 0;
		bool isFindPinyin = false;
		for( j = 0; j < m_pyDataArray.GetSize(); j++ )
		{
			strOneLine = m_pyDataArray.GetAt( j );
			p1 = strOneLine.Find(_T(":"));
			if( p1>= 0 )
			{
				strHZData = strOneLine.Right(strOneLine.GetLength() - p1);
			}
			if( strHZData.Find( str ) != -1 )
			{
				isFindPinyin = true;
				p1 = strOneLine.Find(_T(":"));
				if( p1 > 0 )
				{
					strTmp = strOneLine.Left( p1 );
					if( iduoyingzi > 0 )
					{
						if( iMode == 1 )
						{
							if( strPY.GetLength() > 0)
								strPY += szDuoyinziSplit + strTmp;
							else
								strPY += strTmp;
						}
					}
					else
					{
						if( strPY.GetLength()<= 0 )
							strPY += strTmp;
						else
							strPY += szSplit +strTmp;
					}
				}
				iduoyingzi ++;
			}
		}
		if( !isFindPinyin )
		{
			strPY += str;
		}
	}
	return strPY;
}
---------------------------------------------------------------------------------
PinYinData_Unicode.txt
---------------------------------------------------------------------------------
a:啊阿呵吖嗄腌锕錒,
ai:爱矮挨哎碍癌艾唉哀蔼隘埃皑呆嗌嫒瑷暧捱砹嗳锿霭乂乃伌僾儗凒剀剴叆呃呝啀嘊噫噯堨塧壒奇娭娾嬡嵦愛懓懝敱敳昹曖欬欸毐溰溾濭烠焥璦皚皧瞹硋磑礙絠薆藹諰譪譺賹躷醷鎄鑀閡阂阨阸隑靄靉餲馤騃鯦鱫鴱崖,
an:按安暗岸俺案鞍氨胺厂广庵揞犴铵桉谙鹌埯黯侒儑匼厈咹唵啽垵垾堓婩媕屽峖干晻洝玵痷盒盦盫碪罯腤荌菴萻葊蓭裺誝諳豻貋遃鉗銨錌钳闇陰隂隌雸鞌韽頇頞顸馣鮟鴳鵪鶕,
ang:昂肮盎仰卬岇昻枊醃醠骯,
ao:袄凹傲奥熬懊敖翱澳嚣拗媪廒骜嗷坳遨聱螯獒鏊鳌鏖岙厫嗸噢嚻囂垇墺墽奡奧媼嫯岰嶅嶴慠扷抝摮擙柪梎棍泑浇滶澆澚熝爊獓璈眑磝磽礉翶翺芺蔜蝹襖謷謸軪郩鏕镺隞驁鰲鴁鴢鷔鼇,
ba:把八吧爸拔罢跋巴芭扒坝霸叭靶笆疤耙捌粑茇岜鲅钯魃菝灞仈伯叐哱哵坺垻墢壩夿妭峇弝抜抪捭朳杷柭欛湃炦犮玐癹皅矲笩紦罷羓胈茷萆蚆覇詙豝跁軷釛釟鈀颰魞鮁鮊鲃鲌鼥,
bai:百白摆败柏拜佰伯稗捭呗掰唄庍扒拝挀排擺敗栢派猈竡粨粺絔薜薭襬贁鞁鞴韛,
ban:半办班般拌搬版斑板伴扳扮瓣颁绊癍坂钣舨阪瘢並分坢埿姅岅彬怑搫攽斒昄朌柈湴瓪秚籓粄絆肦蝂螁螌褩覂豳跘辦辧辨辩辬辯鈑鉡闆靽頒魬鳻,
bang:帮棒绑磅镑邦榜蚌傍梆膀谤浜蒡並嗙垹埲塝嫎峀崗幇幚幫彭徬挷捠搒旁棓牓玤硥稖紡綁縍纺艕蚄蛖蜯螃謗邫鎊鞤騯髈,
bao:包抱报饱保暴薄宝爆剥豹刨雹褒堡苞胞鲍炮瀑龅孢煲褓鸨趵葆佨儤剝勹勽呆嘐嚗堢報媬嫑寚寳寶忁怉曓枹珤砲窇笣簿緥菢蕔藵虣蚫袌袍裒裦襃賲鉋鑤铇闁靌靤飹飽駂骲髱鮑鳵鴇齙宀,
be:萡,
bei:被北倍杯背悲备碑卑贝辈钡焙狈惫臂褙悖蓓鹎鐾呗邶鞴孛陂碚俻俾偝偹備僃哱唄喺垻埤怫愂憊揹昁杮柸桮梖棑棓椑波牬犕狽珼琲痺盃禙箃糒苝茀菩萆萯葡藣蛽蜚襬誖諀貝跋軰輩鄁鉳鋇錍鐴骳鵯,
ben:本奔苯笨夯锛贲畚坌体倴喯夲奙捹撪桳楍泍渀炃燌犇獖翉蟦賁輽逩錛鐼,
beng:蹦绷甭崩迸蚌泵甏嘣伻俸傍傰唪嗙埄埲堋塴奟嵭平抨挷搒旁榜漨熢琣琫痭祊絣綳繃菶跰逬錋鏰镚閍鞛,
bi:比笔闭鼻碧必避逼毕臂彼鄙壁蓖币弊辟蔽毙庇敝陛毖痹秘泌秕薜荸芘萆匕裨畀俾嬖狴筚箅篦舭荜襞庳铋跸吡愎贲滗濞璧哔髀弼妣婢仳佊佖佛偪匂卑咇啚嗶坒埤堛复夶奰妼娝媲嬶屄崥幅幣幤庀廦弻彃怭怶悂愊拂捭斃旇服朼枇枈柀柲梐椑楅檗殍毴沘波湢滭潷煏熚獘獙珌畁畐畢疕疪痺皀皕瞥禆稫笓筆箃箄箆篳粃粊紕紴綼縪繴纰罷罼翍聛肶肸胇脾腗腷苾萞蓽蘗虑蜌螕袐被襅襣觱詖诐豍貏貱費賁贔费赑跛踾蹕躃躄邲鄨鄪鈚鉍錍鎞鏎鐴鐾閇閈閉閟闬陂陴鞁鞞鞸韠飶饆馝馥駜驆髲魓魮鮅鮩鰏鲾鴓鵖鶝鷝鷩鸊鼊,
bia:髟,
bian:边变便遍编辩扁贬鞭卞辨辫忭砭匾汴碥蝙褊鳊笾苄窆弁缏煸変封峅徧惼抃拚揙昪汳炞牑猵獱甂疺稨稹箯籩糄編緶臱艑萹藊覍覵變豍貶辡辦辧辮辯邉邊邲釆鍽閞鞕頨鯾鯿鴘鶣髟,
biao:表标彪膘杓婊飑飙鳔瘭飚镳裱骠镖俵僄儦剽墂嫖幖徱摽標檦淲滮漂瀌灬熛爂猋穮篻脿膔臕苞蔈藨褾諘謤贆錶鏖鏢鑣颮颷飆飇飈飊驃驫骉鰾麃髟,
bie:别憋鳖瘪蹩別咇彆徶扒拔捌撆撇柭柲猰癟秘穪苾莂蔽虌蛂蟞襒鱉鼈龞,
bin:宾濒摈彬斌滨豳膑殡缤髌傧槟鬓镔玢份儐擯椕殯氞汃浜濱濵瀕瑸璸砏繽臏虨蠙訜豩賓賔贇赟邠鑌霦頻顮频髕髩鬂鬢,
bing:并病兵冰丙饼屏秉柄炳摒槟禀邴並仌併倂偋傡冫垪寎平幷庰怲抦拼掤昞昺枋栟栤梹棅檳氷燷燹琕痭癛癝眪稟窉竝絣綆绠苪蛃誁跰鈵鉼鋲陃靐鞆鞞鞸餅餠鮩疒,
bo:拨波播泊博伯驳玻剥薄勃菠钵搏脖帛般柏舶渤铂箔膊魄卜礴跛檗亳鹁踣啵蕃簸钹饽擘仢佛侼僠僰剝募哱噃嚗壆妭孛孹嶓帗彴怕愽懪拍拔挬撥擗暴服柭桲榑檘欂殕泼浡淿湐潑潘瀑煿爆牔犦犻狛猼瓝瓟番癶發白百皪盋砵碆磻礡秡穛笩箥簙簿糪紴缽肑胉艊艴苩茀茷菩葧蒲蔔蔢薜蘖蘗蚾袚袯袹襎襏襮詙譒豰趵跑蹳郣鈸鉑鉢鋍鎛鑮镈餑餺馎馛馞駁駮驋髆髉鮁鮊鱍鲅鲌鵓掰,
bu:不步补布部捕卜簿哺堡埠怖埔瓿逋晡钸钚醭卟佈僕勏吥咘埗婄尃峬庯廍悑抪拊捗捬撲擈柨歨歩溥獛秿箁篰荹蔀薄補誧踄輹轐郶鈈鈽附陠鞴餔餢鯆鳪鵏鸔,
ca:擦拆礤嚓傪囃攃橴磣礸蔡遪,
cai:才菜采材财裁猜踩睬蔡彩倸偲啋埰婇寀戝扐採揌棌綵縩纔財跴,
can:蚕残掺参惨惭餐灿骖璨孱黪粲傪儏參叄叅喰嘇噆囋嬠嬱嵾慘慙慚憯戔摲朁殘淺湌澯燦爘穇篸薒蝅蠶蠺謲蹔鏒飡飱驂鯵鰺鲹黲,
cang:藏仓沧舱苍伧仺倉傖凔匨嵢欌滄濸獊瑲篬罉臧艙蒼蔵螥賶鑶鶬鸧,
cao:草操曹槽糙嘈艚螬漕傮屮嶆愺慅慒懆撡曺澡肏艸艹蓸褿襙造鄵鏪鐰騲鼜,
ce:册侧策测厕恻側冊厠墄嫧帻幘廁惻憡拺敇柵栅測畟笧筞筴箣簎粣荝萗萴蓛赦齰刂,
cen:参岑涔參叄叅嵾梣汵硶穇笒篸膥,
ceng:曾层蹭噌僧增層嶒橧竲繒缯驓,
ceok:硛硳,
ceom:岾,
ceon:猠,
ceor:乽,
cha:查插叉茶差岔搽察茬碴刹诧楂槎镲衩汊馇檫姹杈锸嚓仛侘偛剎嗏土垞奼岎嵖扠扱挿捈捷接揷摖斜査梌猹疀秅紁肞臿艖芆苴荖荼褨訍詧詫蹅釵銟鍤鎈鑔钗靫餷喳,
chai:柴拆差豺钗瘥虿侪儕勑叉喍囆扠搓查犲祡茈茝蔕蠆袃訍釵齜龇,
chan:产缠掺搀阐颤铲谗蝉单馋觇婵蒇谄冁廛孱蟾羼镡忏潺禅骣躔澶丳亶佔僝僤儃儳兎兔刬剗剷劖単厘啴單嘽嚵囅團墠壥嬋嬗崭嵼嶃嶄巉幝幨憚懴懺掸摌摲摻撣攙斺旵梴棎榐欃毚沾浐渐湹滻漸潹瀍瀺灛煘燀獑產産硟磛禪簅緂緾繟繵纏纒胀脠艬苫蕆螹蟬蟺袩裣裧襌襜襝覘誗諂譂讇讒讖谶蹍辿鄽酁醦鉆鋋鋓鏟鑱镵閳闡韂顫饞,
chang:长唱常场厂尝肠畅昌敞倡偿猖裳鲳氅菖惝嫦徜鬯阊怅伥昶苌娼仧倀倘僘償儻兏厰嘗嚐場塲尙尚廠悵晿暢棖椙淌淐焻玚琩瑒瑺瓺甞畼脹腸膓萇蟐裮誯鋹鋿錩鏛锠長镸閶闛韔鯧鱨鲿鼚,
chao:朝抄超吵潮巢炒嘲剿绰钞怊焯耖晁仦仯劋勦唠嘮巐巣弨摷槱樔欩涛漅濤焣煼牊眧窲粆紹綤綽縐繛绉绍罺觘訬謅謿诌趠趫轈鄛鈔麨鼂鼌,
che:车撤扯掣彻尺澈坼砗伡俥偖勶呫唓喢多夛奲宅屮徹揊摰撦斥池烢烲焎爡瞮硨硩聅莗蛼詀謵車迠頙,
chen:趁称辰臣尘晨沉陈衬橙忱郴榇抻谌碜谶宸龀嗔伧琛侲傖儭嚫堪塡填塵墋夦帘愖捵揨敐曟枕桭棧棽樄櫬沈湛瀋烥煁疢疹瘎瘨眈瞋硶磣稱綝縝缜肜胂茞莀莐蔯薼螴襯訦諃諶謓謲讖賝贂趂趻跈踸軙迧醦鈂鍖闖闯陳霃鷐麎齓齔秤,
cheng:成乘盛撑称城程呈诚惩逞骋澄橙承塍柽埕铖噌铛酲晟裎枨蛏丞瞠乗伥侱倀偁僜净呛嗆埩堘塖娍宬峸嵊庱徎徴徵悜憆憕懲抢挰掁搶摚摤撐撜敞朾棖棦椉槍樘橕橖檉檙氶泟洆浈浧浾淨溗澂瀓瀞爯牚珵珹琤瑲畻盯睈矃碀稱穪窚竀筬絾緽脀脭荿虰蟶觕誠赪赬趟踜蹦郕郢醒鋮鎗鏳鏿鐺阷靗頳饓騁騬鯎黨秤,
chi:吃尺迟池翅痴赤齿耻持斥侈弛驰炽匙踟坻茌墀饬媸豉褫敕哧瘛蚩啻鸱眵螭篪魑叱彳笞嗤傺佁侙俿剟勅卙卶叺呎呬呮呹哆啸喜喫嘨嘯噄噭坘垑奓她妛屟岻彨彲徲恜恥慗慸憏懘扡抬抶拆拕拖拸捇提搋摛摴攡杘柅柢樆欼歗歭歯汖沱沶治泜淔湁滞滯漦灻烾熾狋瓻痓痸瘈癡眙瞝祇离移竾筂箈箎粚糦絺翄翤翨耛肔胝胣胵脪腟芪茬荎莉菭蚇蚳蛇蝭袲袳裭訵誀誃誺謘謻貾赿趍趐趩跅跢跮踅踶軧迡迣遅遟遫遲邌鉓鉹銐鍉離雴飭飾餝饎饰馳騺驪骊鳷鴟鵄鵣鶒鶗鶙鷘麶黐齒齝郗,
chong:冲重虫充宠崇涌种艟忡舂铳憧茺偅傭僮喠嘃埫寵崈徸憃揰摏樁沖浺漴潼烛爞珫痋盅祌種緟罿翀茧蝩蟲衝褈蹖蹱酮銃隀,
chou:抽愁臭仇丑稠绸酬筹踌畴瞅惆俦帱瘳雠丒侴偢儔吜嚋圳妯婤媿嬦幬怞懤扭掫揄搊擣杻杽栦椆檮殠溴燽牰犨犫畤疇皗盩眣矁篘籌紬絒綢臰菗薵裯詶謅譸讎讐诌诪跾躊遚酧醔醜醻鈕钮雔魗鮘鯈鲋,
chu:出处初锄除触橱楚础储畜滁矗搐躇厨雏楮杵刍怵绌亍憷蹰黜蜍樗俶傗儊儲処助嘼埱媰岀幮廚慉懨拀摢摴敊斶柠椘榋槒橻檚櫉櫖櫥欪歜涂淑滀濋炪犓珿琡璴硫礎祝禇竌竐篨絀絮耝耡臅芻菆著蒢蒭蓫蕏藸處蟵蠩褚觕觸詘諔諸诎诸豖豠貙趎跦踀踰躕鄐鉏鋤閦雛鶵鸀齣齭齼屮,
chua:撮欻歘,
chuai:揣膪啜嘬搋踹欼腄膗,
chuan:穿船传串川喘椽氚遄钏舡舛巛傳僢剶圌堾惴掾暷歂汌猭玔瑏甎篅膞舩荈賗踳踹輲釧镩鶨,
chuang:窗床闯创疮幢怆仓仺倉傸刅刱剏剙創噇囪囱愴戧摐朣橦漴漺牀牎牕瘡磢窓窻膧舂葱蔥闖,
chui:吹垂炊锤捶椎槌棰陲倕
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值