首页 > 代码 > 常规代码 > 正文

代码

阅读排行

获取GBK码汉字拼音首字母
2018-05-16 14:54:02   来源:Fcode研讨团队   评论:0 点击:

通过定义一个一维数组保存汉字拼音首字母,通过GBK码快速换算到数组下标获取首字母。可以用来实现类似手机通讯录输入姓名首字母来快速查找的算法。

获取GBK码汉字拼音首字母
fortran 90
szw_sh@163.com
2018-05-12
 
相关资料来源于网络。按照常用字、常用读音优先原则选取读音首字母,首字母以小写字母表示。

汉字GBK码为双字节,范围为8140-FEFE,首字节129-254,尾字节64-254。定义了一个一维数组保存汉字首字母,下标值 +1,使得下标可以从1开始。下标=(首字节-129)*191+(尾字节-64)+1。

汉字GBK码大约有25%编码为各种非汉字符号,其拼音首字母设为空格字符。GBK码有21003个汉字,收集到20887个拼音,剩余116个生僻字没找到拼音。
 
! 汉字拼音首字母索引数组引用示例
! szw_sh@163.com
! 2018-05-12
! fortran 90
Program fcode_cn
  use md_idx
  Implicit None
  character(len=*) , parameter :: h='汉字拼音首字母索引数组示例'! 定义示例汉字字符串
  character(len=len(h)/2) :: py   ! 用于保存对应首字母的变量
  character(len=len(h))   :: h1
  character(len=len(py))  :: py1
  integer :: i , j = 0 , k , n
  Do i=1,len_trim(h),2            ! 顺序对汉字处理
    k=md_Char2Index(h(i:i+1))     ! 计算汉字GBK码对应idx数组的下标
    j=j+1
    py(j:j)=md_index(k:k)         ! 将拼音首字母按顺序写入字符串
  End Do
  write(*,'(1x,a)') h
  !write(*,'(1x,a)') py
  write(*,'(1x,a)') '请输入需要查找的子串拼音首字母,例如:szm'
  read(*,'(a)') py1
  k=len_trim(py1)
  n=index(py,py1(1:k))
  if( n < 1 ) stop '示例字符串中不包含查询子串'
  h1=h
  h1(1:2*(n-1))=' '
  h1(2*(n+k)-1:)=' '
  write(*,'(/1x,a,/)') '符合条件的子串位置如下:'
  write(*,'(1x,a)') h
  write(*,'(1x,a)') h1
End Program fcode_cn
调用方法为:
use md_idx,通过换算GBK码对应的数组下标获取拼音首字母。 /uploadfile/2018/0516/20180516025346513.f90

演示如何使用该模块进行汉字快速查询

相关热词搜索:汉字 拼音 首字母 GBK

上一篇:利用蔡勒公式获得给定日期的星期数
下一篇:最后一页

分享到: 收藏