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个生僻字没找到拼音。
01 | ! 汉字拼音首字母索引数组引用示例 |
02 | ! szw_sh@163.com |
03 | ! 2018-05-12 |
04 | ! fortran 90 |
05 | Program fcode_cn |
06 | use md_idx |
07 | Implicit None |
08 | character ( len = * ) , parameter :: h = '汉字拼音首字母索引数组示例' ! 定义示例汉字字符串 |
09 | character ( len = len ( h ) / 2 ) :: py ! 用于保存对应首字母的变量 |
10 | character ( len = len ( h ) ) :: h 1 |
11 | character ( len = len ( py ) ) :: py 1 |
12 | integer :: i , j = 0 , k , n |
13 | Do i = 1 , len_trim ( h ) , 2 ! 顺序对汉字处理 |
14 | k = md_Char 2 Index ( h ( i : i +1 ) ) ! 计算汉字GBK码对应idx数组的下标 |
15 | j = j +1 |
16 | py ( j : j ) = md_index ( k : k ) ! 将拼音首字母按顺序写入字符串 |
17 | End Do |
18 | write ( * , '(1x,a)' ) h |
19 | !write(*,'(1x,a)') py |
20 | write ( * , '(1x,a)' ) '请输入需要查找的子串拼音首字母,例如:szm' |
21 | read ( * , '(a)' ) py 1 |
22 | k = len_trim ( py 1 ) |
23 | n = index ( py , py 1 ( 1 : k ) ) |
24 | if ( n < 1 ) stop '示例字符串中不包含查询子串' |
25 | h 1 = h |
26 | h 1 ( 1 : 2 * ( n -1 ) ) = ' ' |
27 | h 1 ( 2 * ( n + k ) -1 : ) = ' ' |
28 | write ( * , '(/1x,a,/)' ) '符合条件的子串位置如下:' |
29 | write ( * , '(1x,a)' ) h |
30 | write ( * , '(1x,a)' ) h 1 |
31 | End Program fcode_cn |
调用方法为:
use md_idx,通过换算GBK码对应的数组下标获取拼音首字母。 /uploadfile/2018/0516/20180516025346513.f90
use md_idx,通过换算GBK码对应的数组下标获取拼音首字母。 /uploadfile/2018/0516/20180516025346513.f90
演示如何使用该模块进行汉字快速查询