Delphi 取汉字的首字母
百度这个标题,出来N多结果,但是每一种都有问题
方法1:
下面这种方法基本还行,但是会漏字,什么意思呢,比如 东莞深圳,它只返回DS ,莞和圳都被吃掉了.
https://www.shuzhiduo.com/A/A7zg3XrKz4/ //取汉字的拼音首字母 function GetHzPy(AHzStr: AnsiString): string; const ChinaCode: array[0..25, 0..1] of Integer = ((1601, 1636), (1637, 1832), (1833, 2077), (2078, 2273), (2274, 2301), (2302, 2432), (2433, 2593), (2594, 2786), (9999, 0000), (2787, 3105), (3106, 3211), (3212, 3471), (3472, 3634), (3635, 3722), (3723, 3729), (3730, 3857), (3858, 4026), (4027, 4085), (4086, 4389), (4390, 4557), (9999, 0000), (9999, 0000), (4558, 4683), (4684, 4924), (4925, 5248), (5249, 5589)); var i, j, HzOrd: integer; // Hz: string[2]; begin i := 1; while i <= Length(AHzStr) do begin if (AHzStr[i] >= #160) and (AHzStr[i + 1] >= #160) then begin HzOrd := (Ord(AHzStr[i]) - 160) * 100 + Ord(AHzStr[i + 1]) - 160; for j := 0 to 25 do begin if (HzOrd >= ChinaCode[j][0]) and (HzOrd <= ChinaCode[j][1]) then begin Result := Result + char(byte('A') + j); break; end; end; Inc(i); end else Result := Result + AHzStr[i]; Inc(i); end; end;
方法2:
它这里分写成了两个函数,第一个函数相当于是字库了,看上去是专门搞不常见字的,所以常见字它就直接忽略了,比如 东莞深圳 =>东G深Z 是不是很奇怪?
function TDM.GetPY1(const hz: string): string; var hstrA, hstrB, hstrC, hstrD, hstrE, hstrF, hstrG, hstrH, hstrJ, hstrK, hstrL, hstrM: string; hstrN, hstrO, hstrP, hstrQ, hstrR, hstrS, hstrT, hstrW, hstrX, hstrY, hstrZ: string; begin hstrA := '吖 锕 嗄 锿 捱 嗳 霭 砹 嗌 嫒 暧 瑷 桉 庵 谙 鹌 埯 铵 揞 犴 黯 坳 嗷' + '廒 獒 遨 聱 螯 鳌 鏖 媪 岙 骜 鏊'; hstrB := '岜 粑 茇 菝 魃 鲅 灞 掰 捭 呗 瘢 癍 阪 坂 钣 舨 浜 蒡 勹 孢 煲 龅 鸨' + '葆 褓 趵 陂 鹎 邶 悖 碚 蓓 褙 鞴 鐾 贲 锛 畚 坌 嘣 甏 荸 匕 吡 妣 秕 俾' + '舭 畀 哔 荜 狴 铋 婢 庳 萆 弼 愎 筚 滗 裨 跸 箅 嬖 篦 薜 濞 髀 璧 襞 砭' + '笾 煸 蝙 鳊 窆 匾 碥 褊 弁 忭 汴 苄 缏 飑 髟 骠 瘭 镖 飙 飚 镳 婊 裱 鳔' + '蹩 傧 缤 槟 镔 豳 殡 膑 髌 鬓 邴 禀 摒 饽 啵 孛 亳 钹 鹁 踣 礴 跛 簸 擘' + '檗 逋 钸 晡 醭 卟 钚 瓿 玢 宀 疒 8'; hstrC := '嚓 礤 骖 黪 粲 璨 伧 嘈 漕 艚 螬 艹 恻 岑 涔 噌 杈 馇 锸 猹 槎 檫 衩' + '镲 汊 姹 钗 侪 虿 瘥 觇 婵 孱 禅 廛 潺 镡 蟾 躔 谄 蒇 冁 忏 羼 伥 娼 菖' + '阊 鲳 苌 徜 嫦 昶 惝 氅 怅 鬯 怊 焯 晁 耖 砗 屮 坼 抻 琛 嗔 宸 谌 碜 龀' + '榇 谶 柽 蛏 铛 瞠 丞 枨 埕 铖 裎 塍 酲 哧 蚩 鸱 眵 笞 嗤 媸 螭 魑 茌 墀' + '踟 篪 豉 褫 彳 叱 饬 敕 啻 傺 瘛 忡 茺 舂 憧 艟 铳 瘳 俦 帱 惆 雠 樗 刍' + '蜍 蹰 杵 楮 褚 亍 怵 绌 憷 黜 搋 啜 嘬 踹 巛 氚 舡 遄 舛 钏 怆 陲 棰 槌' + '蝽 莼 鹑 踔 辍 龊 呲 祠 茈 鹚 糍 苁 枞 骢 璁 淙 琮 楱 腠 辏 徂 殂 猝 蔟' + '蹙 蹴 汆'; hstrD := '哒 耷 嗒 褡 妲 怛 笪 靼 鞑 岱 甙 绐 迨 玳 埭 黛 眈 聃 殚 瘅 箪 儋 疸 啖' + '萏 澹 裆 谠 凼 宕 砀 菪 叨 忉 氘 纛 锝 噔 簦 戥 嶝 磴 镫 羝 嘀 镝 籴 荻 觌' + '氐 诋 邸 坻 柢 砥 骶 娣 谛 棣 睇 碲 嗲 巅 癫 踮 阽 坫 玷 钿 癜 簟 貂 鲷 铞' + '垤 瓞 堞 揲 耋 牒 蹀 鲽 仃 玎 疔 耵 酊 啶 腚 碇 铥 咚 岽 氡 鸫 垌 峒 胨 胴' + '硐 蔸 篼 蚪 窦 嘟 渎 椟 牍 黩 髑 笃 芏 蠹 椴 煅 簖 怼 碓 憝 镦 礅 盹 趸 沌' + '炖 砘 咄 裰 铎 踱 哚 缍 沲 卩 亻 赕 铫 町 铤 夂 丶'; hstrE := '屙 莪 锇 婀 呃 苊 轭 垩 谔 阏 愕 萼 腭 锷 鹗 颚 噩 鳄 蒽 摁 鸸 鲕 迩 珥' + '铒 佴 嗯 唔 诶 2'; hstrF := '垡 砝 幡 蕃 燔 蹯 蘩 畈 梵 邡 枋 钫 鲂 舫 妃 绯 扉 蜚 霏 鲱 淝 腓 悱 斐' + '榧 翡 篚 狒 痱 镄 棼 鼢 偾 鲼 瀵 沣 砜 葑 酆 唪 俸 缶 呋 趺 麸 稃 跗 凫 孚' + '芙 芾 怫 绂 绋 苻 祓 罘 茯 郛 砩 莩 蚨 匐 桴 艴 菔 蜉 幞 蝠 黻 拊 滏 黼 驸' + '鲋 赙 蝮 鳆 馥 攵 犭'; hstrG := '旮 伽 钆 尜 尕 尬 陔 垓 赅 丐 戤 坩 泔 苷 疳 酐 尴 澉 橄 擀 旰 矸 绀 淦' + '罡 筻 戆 槔 睾 杲 缟 槁 藁 诰 郜 锆 圪 纥 袼 鬲 嗝 塥 搿 膈 镉 骼 哿 舸 虼' + '硌 哏 亘 艮 茛 赓 哽 绠 鲠 肱 蚣 觥 珙 佝 缑 篝 鞲 岣 枸 笱 诟 媾 彀 遘 觏' + '轱 鸪 菰 蛄 觚 酤 毂 鹘 汩 诂 牯 罟 钴 嘏 臌 瞽 崮 梏 牿 痼 锢 鲴 胍 鸹 呱' + '卦 诖 倌 鳏 掼 涫 盥 鹳 咣 桄 胱 犷 妫 皈 鲑 宄 庋 匦 晷 簋 刿 炅 鳜 衮 绲' + '磙 鲧 呙 埚 崞 聒 蝈 帼 掴 虢 馘 猓 椁 蜾 桧 莞 呷'; hstrH := '鹄 铪 嗨 胲 醢 顸 蚶 鼾 邗 晗 焓 菡 颔 撖 瀚 绗 颃 沆 蒿 嚆 薅 蚝 嗥 濠' + '昊 皓 颢 灏 诃 嗬 劾 曷 盍 颌 阖 翮 壑 桁 珩 蘅 訇 薨 闳 泓 荭 蕻 黉 讧 瘊' + '篌 糇 骺 後 逅 堠 鲎 虍 烀 轷 唿 惚 滹 囫 斛 猢 煳 鹕 槲 醐 觳 浒 琥 冱 岵' + '怙 戽 祜 笏 扈 瓠 鹱 骅 铧 桦 踝 獾 洹 萑 锾 寰 缳 鬟 奂 浣 逭 漶 鲩 擐 肓' + '隍 徨 湟 遑 潢 璜 篁 癀 蟥 鳇 诙 咴 虺 晖 珲 麾 隳 洄 茴 哕 浍 荟 恚 彗 喙' + '缋 蕙 蟪 阍 馄 诨 溷 耠 锪 劐 攉 钬 夥 镬 嚯 藿 蠖 砉 圜'; //hstrI:= hstrJ := '丌 叽 乩 玑 芨 矶 咭 剞 唧 屐 笄 嵇 犄 赍 跻 畿 齑 墼 羁 岌 亟 佶 笈 戢' + '殛 楫 蒺 瘠 蕺 虮 掎 戟 嵴 麂 芰 哜 洎 觊 偈 暨 跽 霁 鲚 稷 鲫 髻 骥 迦 浃' + '痂 笳 袈 葭 跏 镓 岬 郏 恝 戛 铗 蛱 胛 瘕 戋 菅 湔' + '犍 搛 缣 蒹 鲣 鹣 鞯 囝 枧 笕 趼 睑 裥 锏 谫 戬 翦 謇 蹇 牮 谏 楗 毽 腱 僭 踺' + '茳 豇 缰 礓 耩 洚 绛 犟 糨 艽 姣 茭 蛟 跤 僬 鲛 鹪 佼 挢 皎 敫 徼 噍 醮 疖' + '嗟 孑 讦 诘 拮 桀 婕 颉 碣 鲒 羯 蚧 骱 钅 矜 衿' + '卺 堇 廑 馑 槿 瑾 妗 荩 赆 缙 觐 噤 泾 旌 菁 腈 阱 刭 肼 儆 憬 弪 迳 胫 婧 獍' + '扃 迥 鸠 赳 阄 啾 鬏 柩 桕 噘 孓 珏 崛 桷 觖 厥 劂 谲 獗 蕨 橛 镢 蹶 矍 爝 皲' + '筠 麇 捃 纟 廴 鄄 莒 9'; hstrK := '蚵 咔 佧 胩 锎 剀 垲 恺 铠 蒈 锴 忾 龛 戡 侃 莰 阚 瞰 伉 闶 钪 尻 栲 铐' + '犒 珂 轲 疴 钶 颏 稞 窠 瞌 蝌 髁 岢 恪 氪 骒 缂 嗑 溘 锞 裉 铿 倥 崆 箜 芤' + '叩 筘 蔻 刳 堀 骷 绔 喾 侉 蒯 郐 哙 狯 脍 髋 诓 哐' + '诳 夼 邝 圹 纩 贶 悝 逵 馗 喹 揆 暌 睽 蝰 夔 跬 匮 喟 愦 蒉 篑 聩 琨 锟 髡 醌' + '鲲 悃 阃 栝 蛞'; hstrL := ' 冫 靓 邋 旯 砬 剌 瘌 崃 徕 涞 铼 赉 睐 濑 癞 籁 岚 褴 斓 镧 榄 漤 罱 啷' + '莨 稂 锒 螂 阆 蒗 唠 崂 痨 铹 醪 栳 铑 耢 仂 叻 泐 鳓 嫘 缧 檑 羸 耒 诔 酹 嘞' + '塄 愣 骊 喱 鹂 缡 蓠 蜊 嫠 鲡 罹 藜 黧 蠡 俚 娌 逦' + '锂 澧 醴 鳢 呖 坜 苈 戾 枥 疠 俪 栎 疬 轹 郦 猁 砺 莅 唳 笠 粝 蛎 詈 跞 雳 溧' + ' 篥 奁 裢 鲢 濂 臁 蠊 琏 裣 蔹 娈 殓 楝 潋 椋 墚 踉 魉 嘹 寮 獠 缭 鹩 钌 蓼' + ' 咧 冽 洌 埒 捩 趔 躐 鬣 啉 粼 嶙 遴 辚 瞵 麟 廪' + '懔 檩 蔺 膦 躏 囹 泠 苓 柃 瓴 棂 绫 翎 聆 蛉 鲮 酃 呤 熘 浏 旒 遛 骝 镏 鎏 绺' + ' 锍 鹨 泷 茏 栊 珑 胧 砻 癃 泸 0 6'; hstrM := '膂 褛 栾 鸾 脔 銮 锊 囵 捋 猡 脶 椤 镙 倮 瘰 蠃 泺 荦 珞 摞 漯 雒 呒 嬷 ' + '蟆 犸 杩 唛 霾 荬 劢 颟 鞔 鳗 螨 墁 幔 缦 熳 镘 邙 硭 漭 蟒 牦 旄 蛑 髦 蝥 蟊' + ' 峁 泖 茆 昴 耄 袤 瑁 瞀 懋 莓 嵋 湄 猸 楣 镅 鹛 浼 ' + '袂 魅 扪 钔 焖 懑 虻 甍 瞢 朦 礞 艨 勐 艋 蜢 懵 蠓 咪 祢 猕 縻 麋 蘼 芈 弭 敉' + ' 脒 糸 汨 宓 谧 嘧 沔 黾 眄 湎 腼 喵 鹋 杪 眇 淼 缈 邈 咩 篾 蠛 岷 玟 苠 珉 缗' + '闵 泯 愍 鳘 茗 冥 溟 暝 瞑 酩 缪 谟 嫫 馍 麽 殁 茉 秣 蓦 貊 瘼 镆 貘 耱 哞 侔' + '眸 鍪 毪 仫 沐 坶 苜 钼 渑'; hstrN := '拗 廾 乜 镎 肭 衲 捺 艿 柰 萘 鼐 囡 喃 楠 赧 腩 蝻 囔 馕 曩 攮 孬 呶 硇' + ' 铙 猱 蛲 垴 瑙 讷 坭 怩 铌 猊 鲵 伲 旎 昵 睨 鲇 鲶 黏 辇 廿 埝 茑 袅 嬲 脲 陧' + '臬 嗫 颞 蹑 蘖 咛 聍 佞 甯 妞 忸 狃 侬 哝 耨 孥 驽' + '弩 胬 钕 恧 衄 傩 喏 搦 锘 恁'; hstrO := '噢 讴 瓯 耦 怄'; hstrP := ' 钯 拚 彷 冖 葩 杷 筢 俳 哌 蒎 爿 蹒 蟠 泮 袢 襻 滂 逄 螃 脬 庖 狍 匏 疱' + '醅 锫 帔 旆 辔 霈 湓 怦 嘭 堋 蟛 丕 纰 邳 铍 噼 芘 枇 蚍 郫 陴 埤 罴 蜱 貔 鼙' + '庀 仳 圮 擗 癖 淠 媲 睥 甓 犏 翩 骈 胼 蹁 谝 剽 缥' + '螵 殍 瞟 嘌 嫖 氕 丿 苤 姘 嫔 颦 榀 牝 娉 俜 枰 鲆 钋 鄱 皤 叵 钷 笸 珀 掊 裒' + ' 攴 噗 匍 璞 濮 镤 溥 氆 镨 蹼'; hstrQ := ' 匚 袷 湫 峤 趄 瞿 桤 萋 嘁 槭 蹊 亓 圻 岐 芪 耆 颀 淇 萁 骐 琦 琪 祺 蛴' + '綦 蜞 蕲 鳍 麒 屺 芑 杞 绮 綮 汔 荠 葺 碛 憩 葜 髂 阡 芊 佥 岍 悭 愆 骞 搴 褰' + ' 钤 虔 掮 箝 肷 慊 缱 芡 茜 倩 椠 戕 戗 跄 蜣 锖 锵' + '镪 嫱 樯 羟 襁 炝 硗 跷 劁 缲 荞 谯 憔 鞒 樵 愀 诮 妾 挈 惬 箧 锲 衾 芩 嗪 溱' + ' 噙 檎 螓 锓 吣 揿 圊 蜻 鲭 檠 黥 苘 謦 箐 磬 罄 跫 銎 邛 穹 茕 筇 蛩 蚯 楸 鳅' + ' 犰 虬 俅 逑 赇 巯 遒 裘 蝤 鼽 糗 岖 诎 祛 蛐 麴 ' + '黢 劬 朐 鸲 蕖 磲 璩 蘧 氍 癯 衢 蠼 阒 觑 悛 诠 荃 辁 铨 筌 蜷 鬈 畎 绻 悫 阕' + '阙 逡 郄 7'; hstrR := '蚺 髯 苒 禳 穰 荛 桡 娆 荏 稔 仞 轫 饪 衽 肜 狨 嵘 榕 蝾 糅 蹂 鞣 铷 嚅' + ' 濡 薷 襦 颥 洳 溽 缛 蓐 朊 蕤 芮 枘 蚋 睿 偌 箬'; hstrS := ' 灬 杓 丨 凵 葚 仨 卅 飒 脎 噻 毵 糁 馓 搡 磉 颡 缫 臊 鳋 埽 瘙 啬 铯 穑' + '铩 痧 裟 鲨 唼 歃 霎 彡 芟 姗 钐 埏 舢 跚 潸 膻 讪 疝 骟 鄯 嬗 蟮 鳝 殇 觞 熵' + '垧 绱 筲 艄 蛸 劭 潲 猞 畲 佘 厍 滠 麝 诜 哂 矧 谂 ' + '渖 胂 椹 蜃 笙 眚 晟 嵊 蓍 酾 鲺 饣 炻 埘 莳 鲥 豕 礻 贳 舐 轼 铈 弑 谥 筮 螫' + '艏 狩 绶 殳 纾 姝 倏 菽 摅 毹 秫 塾 沭 腧 澍 唰 蟀 闩 涮 孀 氵 妁 铄 嗍 搠 蒴' + '槊 厶 咝 鸶 缌 蛳 厮 锶 澌 汜 兕 姒 祀 泗 驷 昇 俟' + '笥 耜 忪 凇 崧 淞 菘 嵩 悚 竦 嗖 溲 馊 飕 锼 螋 叟 嗾 瞍 薮 稣 夙 涑 谡 嗉 愫' + '蔌 觫 簌 狻 荽 眭 睢 濉 谇 莘 3 4'; hstrT := '沓 呔 焘 钭 冂 苕 扌 趿 铊 溻 鳎 闼 遢 榻 骀 邰 炱 跆 鲐 薹 肽 钛 昙 郯' + '覃 锬 忐 钽 铴 羰 镗 饧 溏 瑭 樘 螗 螳 醣 帑 傥 耥 韬 饕 洮 啕 鼗 忑 忒 铽 慝' + '滕 绨 缇 鹈 醍 倜 悌 逖 裼 畋 阗 忝 殄 掭 佻 祧 笤 ' + '龆 蜩 髫 鲦 窕 粜 萜 餮 莛 婷 葶 蜓 霆 梃 嗵 仝 佟 茼 砼 僮 潼 恸 骰 荼 酴 钍' + ' 堍 菟 抟 疃 彖 煺 暾 饨 豚 氽 乇 佗 坨 沱 柁 砣 跎 酡 橐 鼍 庹 柝 箨'; //hstrU:= //hstrV:= hstrW := ' 亠 娲 佤 腽 崴 剜 蜿 纨 芄 绾 脘 菀 琬 畹 罔 惘 辋 魍 偎 逶 隈 葳 煨 薇' + '囗 帏 沩 闱 涠 帷 嵬 炜 玮 洧 娓 诿 隗 猥 痿 艉 韪 鲔 軎 猬 阌 雯 刎 汶 璺 蓊' + '蕹 倭 莴 喔 肟 幄 渥 硪 龌 圬 邬 浯 蜈 鼯 仵 妩 庑 忤 怃 迕 牾 鹉 兀 阢 杌 芴' + '焐 婺 痦 骛 寤 鹜 鋈 5'; hstrX := ' 郇 彐 噱 荨 圩 兮 穸 郗 唏 奚 浠 欷 淅 菥 粞 翕 舾 皙 僖 蜥 嬉 樨 歙 熹' + '羲 螅 蟋 醯 曦 鼷 觋 隰 玺 徙 葸 屣 蓰 禧 饩 阋 舄 禊 狎 柙 硖 遐 瑕 黠 罅 氙' + '祆 籼 莶 跹 酰 暹 娴 痫 鹇 冼 猃 蚬 筅 跣 藓 燹 岘 苋 霰 芗 缃 葙 骧 庠 饷 飨' + '鲞 蟓 枭 哓 枵 骁 绡 逍 潇 箫 魈 崤 筱 偕' + '勰 撷 缬 绁 亵 渫 榍 榭 廨 獬 薤 邂 燮 瀣 躞 昕 歆 馨 鑫 囟 陉 硎 擤 荇 悻 芎' + ' 咻 庥 鸺 貅 馐 髹 岫 溴 盱 胥 顼 诩 栩 糈 醑 洫 勖 溆 煦 蓿 谖 揎 萱 暄 煊 儇' + '痃 漩 璇 泫 炫 铉 渲 楦 碹 镟 泶 踅 鳕 谑 埙 窨 獯 薰 曛 醺 峋 恂 洵 浔 荀 鲟' + ' 徇 巽 '; hstrY := ' 肀 剡 桠 伢 岈 琊 睚 痖 迓 垭 娅 砑 氩 揠 恹 胭 崦 菸 湮 腌 鄢 嫣 讠 闫' + '妍 芫 筵 檐 兖 俨 偃 厣 郾 琰 罨 魇 鼹 晏 焱 滟 酽 谳 餍 赝 泱 鞅 炀 徉 烊 蛘' + '怏 恙 幺 夭 吆 爻 肴 轺 珧 徭 繇 鳐 杳 窈 崾 鹞 曜 揶 铘 邺 晔 烨 谒 靥 衤 咿' + '猗 欹 漪 噫 黟 圯 诒 怡 迤 饴 咦 荑 贻 眙' + '酏 痍 嶷 钇 苡 舣 旖 弋 刈 仡 佚 呓 佾 峄 怿 驿 奕 弈 羿 轶 悒 挹 埸 翊 缢 瘗' + '蜴 熠 镒 劓 殪 薏 翳 癔 镱 懿 洇 氤 铟 喑 堙 垠 狺 鄞 夤 龈 霪 吲 蚓 瘾 茚 胤' + '莺 瑛 嘤 撄 罂 璎 鹦 膺 茔 荥 萦 楹 滢 蓥 潆 嬴 瀛 郢 颍 瘿 媵 唷 邕 墉 慵 壅' + '镛 鳙 狳 谀 馀 萸 雩 嵛 揄 腴 瑜 觎 窬 蝓 伛 俣 圄 圉 庾 瘐 窳 龉 聿 妪 饫 昱' + ' 钰 谕 阈 鹆 煜 蓣 毓 蜮 燠 鹬 鬻 鸢 眢 箢 沅 爰 鼋 塬 橼 螈 垸 媛 掾 瑗 刖 钺' + '樾 龠 瀹 纭 芸 昀 氲 狁 殒 郓 恽 愠 韫 熨 攸 禺 1'; hstrZ := ' 辶 酢 喋 阝 咂 拶 甾 崽 糌 簪 昝 趱 錾 瓒 臧 驵 奘 唣 迮 啧 帻 笮 舴 箦' + ' 赜 仄 昃 谮 缯 罾 锃 甑 吒 哳 揸 楂 齄 砟 咤 痄 蚱 砦 瘵 旃 谵 搌 鄣 嫜 獐 璋' + ' 蟑 仉 嶂 幛 钊 啁 诏 笊 棹 蜇 辄 谪 摺 磔 赭 褶 柘 鹧 浈 桢 祯 蓁 榛 箴 胗 轸' + ' 畛 缜 稹 圳 鸩 朕 赈 峥 钲 铮 筝 徵 诤 卮' + '栀 祗 胝 埴 絷 跖 摭 踯 芷 祉 咫 枳 轵 黹 酯 忮 豸 帙 郅 栉 陟 桎 贽 轾 鸷 彘' + '痣 蛭 骘 雉 膣 觯 踬 舯 锺 螽 冢 踵 妯 碡 纣 绉 胄 荮 酎 籀 侏 邾 洙 茱 铢 槠' + '潴 橥 竺 舳 瘃 躅 渚 麈 伫 苎 杼 炷 疰 箸 翥 颛 啭 馔 丬 隹 骓 惴 缒 肫 窀 倬' + ' 涿 斫 菹 镞 俎 躜 缵 攥 蕞 樽 鳟 撙 阼 怍 祚 胙 唑 秭 梓'; if pos(hz, hstrA) > 0 then result := 'A' else if pos(hz, hstrB) > 0 then result := 'B' else if pos(hz, hstrC) > 0 then result := 'C' else if pos(hz, hstrD) > 0 then result := 'D' else if pos(hz, hstrE) > 0 then result := 'E' else if pos(hz, hstrF) > 0 then result := 'F' else if pos(hz, hstrG) > 0 then result := 'G' else if pos(hz, hstrH) > 0 then result := 'H' else if pos(hz, hstrJ) > 0 then result := 'J' else if pos(hz, hstrK) > 0 then result := 'K' else if pos(hz, hstrL) > 0 then result := 'L' else if pos(hz, hstrM) > 0 then result := 'M' else if pos(hz, hstrN) > 0 then result := 'N' else if pos(hz, hstrO) > 0 then result := 'O' else if pos(hz, hstrP) > 0 then result := 'P' else if pos(hz, hstrQ) > 0 then result := 'Q' else if pos(hz, hstrR) > 0 then result := 'R' else if pos(hz, hstrS) > 0 then result := 'S' else if pos(hz, hstrT) > 0 then result := 'T' else if pos(hz, hstrW) > 0 then result := 'W' else if pos(hz, hstrX) > 0 then result := 'X' else if pos(hz, hstrY) > 0 then result := 'Y' else if pos(hz, hstrZ) > 0 then result := 'Z' else result := ''; end; function TDM.GetPY(const sScrStr: string): string; var iCount: integer; sHz, sPYM: string; begin iCount := 1; while iCount <= length(sScrStr) do begin sHz := COPY(sScrStr, iCount, 2); case WORD(sHz[1]) shl 8 + WORD(sHz[2]) of $B0A1..$B0C4: result := 'A'; $B0C5..$B2C0: result := 'B'; $B2C1..$B4ED: result := 'C'; $B4EE..$B6E9: result := 'D'; $B6EA..$B7A1: result := 'E'; $B7A2..$B8C0: result := 'F'; $B8C1..$B9FD: result := 'G'; $B9FE..$BBF6: result := 'H'; $BBF7..$BFA5: result := 'J'; $BFA6..$C0AB: result := 'K'; $C0AC..$C2E7: result := 'L'; $C2E8..$C4C2: result := 'M'; $C4C3..$C5B5: result := 'N'; $C5B6..$C5BD: result := 'O'; $C5BE..$C6D9: result := 'P'; $C6DA..$C8BA: result := 'Q'; $C8BB..$C8F5: result := 'R'; $C8F6..$CBF9: result := 'S'; $CBFA..$CDD9: result := 'T'; $CDDA..$CEF3: result := 'W'; $CEF4..$D1B8: result := 'X'; $D1B9..$D4D0: result := 'Y'; $D4D1..$D7F9: result := 'Z'; else result := GetPY1(sHz); end; if Result = '' then begin sPYM := sPYM + COPY(sScrStr, iCount, 1); iCount := iCount + 1; end else begin sPYM := sPYM + Result; iCount := iCount + 2; end; Result := sPYM; end; //end While end;
方法2有个优点,就是把字库存到数据里,后期还可以随意添加汉字,但是仅限少量,量大了会很累,毕竟汉字可不少
所以,参考方法1和方法2,可以发现:
方法1 遇到不在范围内的字时,会被吃掉
方法2 遇到不在字库中的字时,会直接把这符个字返回来,不会吃字
其实他们是互补的啊,既然使用其中一个方法都没办法完美的完成任务,那何不让他们两个结合使用呢?
function TDM.GetBriefCode(AHzStr: string): string; var i, n: integer; s1, s: string; begin s1 := Trim(AHzStr); n := Length(s1); for i := 1 to n do s := s + GetPY(AHzStr[i]); //这里先用方法2,因为它不会吃字,遇到不识别的,会略过 Result := GetHzPy(s); //最后再手方法1过一遍 end;
效果相当丝滑: