| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3412 人关注过本帖
标题:关于从汉字转换首个拼音字母的问题
只看楼主 加入收藏
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:651
专家分:20
注 册:2014-1-16
结帖率:88.6%
收藏
已结贴  问题点数:20 回复次数:13 
关于从汉字转换首个拼音字母的问题
我以前从论坛上抄了一个转换的程序,现在需要一个快速查询用到这个小程序,但是我发现有时会出错,请师傅们能不能看看。
                     achHZString="采花"
            local achPYString,i,j,chPY,achHZ
            achPYString=''
            set collate to 'PINYIN'
            achPYCode='八嚓咑妸发旮铪讥讥咔垃呣拿讴趴七呥仨他哇哇哇夕丫匝咗'
            for i=1 to len(achHZString)
                if asc(substr(achHZString,i,1))>160
                    achHZ=substr(achHZString,i,2)
                    chPY=''
                    for j=1 to 26
                        if substrc(achHZ,1,1)<substrc(achPYCode,j,1)
                            chPY=chr(asc('a')+j-1)
                            exit
                        endif
                    endfor
                    achPYString=achPYString+upper(chPY)
                    i=i+1
                else
                    if (asc(substr(achHZString,i,1))>32)
                        achPYString=achPYString+upper(substr(achHZString,i,1))
                    endif
                endif
            endfor
            =MESSAGEBOX(achPYString)
            
搜索更多相关主题的帖子: 汉字 转换 拼音 字母 asc 
2019-05-20 11:40
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:651
专家分:20
注 册:2014-1-16
收藏
得分:0 
正确结果应该是"CH",但是结果却是"BH",我也不知道哪里错了。
2019-05-20 11:41
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:987
专家分:4946
注 册:2013-2-16
收藏
得分:4 
用木瓜老师的库可以做,而且代码短。
程序代码:
Set library to E:\PROGS\myFll
?ToPy("中华人民共和国") &&显示ZHRMGHG
?ToPy("采花") &&显示 CH
Set library to 
2019-05-20 13:09
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:41
帖 子:763
专家分:2503
注 册:2011-5-8
收藏
得分:4 
achPYCode='八擦咑妸发旮铪讥讥咔垃呣拿讴趴七呥仨他哇哇哇夕丫匝咗'
替换下试试

dBase有人接盘了。
2019-05-20 13:47
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:41
帖 子:763
专家分:2503
注 册:2011-5-8
收藏
得分:0 
这个代码哪来的,想法很有创意。
关键是把汉字排序找到每个拼音开始的第一个字。 achPYCode='八擦咑妸发旮铪讥讥咔垃呣拿讴趴七呥仨他哇哇哇夕丫匝咗'
只是不同操作系统,字符集是否一样,上表是不是不变,你可以试试。
这一行可以改一下。chPY=chr(asc('a')+j-1) 变为chPY=chr(j+96)

dBase有人接盘了。
2019-05-20 13:54
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10541
专家分:42927
注 册:2014-5-20
收藏
得分:4 
有100%准确率的算法吗(除了查字典)?
2019-05-20 16:32
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:651
专家分:20
注 册:2014-1-16
收藏
得分:0 
xuminxz师傅,用您的方法改了不行,输“中华人民共和国”显示ZHRLGHG,还是有错误。厨师王德榜师傅,您说的木瓜老师的类库在哪里?能告诉我吗?
2019-05-20 16:52
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9803
专家分:26906
注 册:2012-2-5
收藏
得分:4 
如果不能解决多音字问题,查字典准确率也达不到100%

坚守VFP最后的阵地
2019-05-20 18:40
schtg
Rank: 12Rank: 12Rank: 12
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1547
专家分:3003
注 册:2012-2-29
收藏
得分:4 
不可能100%的,有些需要手动更正的。
2019-05-20 20:05
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:41
帖 子:763
专家分:2503
注 册:2011-5-8
收藏
得分:0 
回复 7楼 fanjinyu9108
程序代码:
            achHZString="中华人民共和国"
            local achPYString,i,j,chPY,achHZ
             achPYString=''
            set collate to 'PINYIN'
            achPYCode='八擦咑妸发旮铪讥讥咔垃妈乸噢帊七冄仨他屲屲屲夕丫傮'
            for i=1 to len(achHZString)
                if asc(substr(achHZString,i,1))>160
                    achHZ=substr(achHZString,i,2)
                    chPY=''
                    for j=1 to 26
                        if substrc(achHZ,1,1)<=substrc(achPYCode,j,1)   
                            chPY=chr(asc('a')+j-1)
                            exit
                        endif
                    endfor
                    achPYString=achPYString+upper(chPY)
                    i=i+1
                else
                    if (asc(substr(achHZString,i,1))>32)
                        achPYString=achPYString+upper(substr(achHZString,i,1))
                    endif
                endif
            endfor
            =MESSAGEBOX(achPYString)


[此贴子已经被作者于2019-5-20 20:27编辑过]


dBase有人接盘了。
2019-05-20 20:09
快速回复:关于从汉字转换首个拼音字母的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016432 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved