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
use md_idx,通过换算GBK码对应的数组下标获取拼音首字母。 /uploadfile/2018/0516/20180516025346513.f90
演示如何使用该模块进行汉字快速查询



