| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
买学问 - 大牛一对一辅导,有问必答买学问 - 专业的付费知识问答平台
共有 371 人关注过本帖
标题:关于从汉字转换首个拼音字母的问题
只看楼主 加入收藏
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:307
专家分:10
注 册:2014-1-16
结帖率:91.67%
  已结贴   问题点数:20  回复次数:11   
关于从汉字转换首个拼音字母的问题
我以前从论坛上抄了一个转换的程序,现在需要一个快速查询用到这个小程序,但是我发现有时会出错,请师傅们能不能看看。
                     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-05-20 11:40
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:307
专家分:10
注 册:2014-1-16
  得分:0 
正确结果应该是"CH",但是结果却是"BH",我也不知道哪里错了。
2019-05-20 11:41
厨师王德榜
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:82
帖 子:505
专家分:1878
注 册:2013-2-16
  得分:4 
用木瓜老师的库可以做,而且代码短。
程序代码:
Set library to E:\PROGS\myFll
?ToPy("中华人民共和国") &&显示ZHRMGHG
?ToPy("采花") &&显示 CH
Set library to 
2019-05-20 13:09
xuminxz
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:201
专家分:560
注 册:2011-5-8
  得分:4 
achPYCode='八擦咑妸发旮铪讥讥咔垃呣拿讴趴七呥仨他哇哇哇夕丫匝咗'
替换下试试

dBase有人接盘了。
2019-05-20 13:47
xuminxz
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:201
专家分:560
注 册: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
等 级:版主
威 望:194
帖 子:6526
专家分:28850
注 册:2014-5-20
  得分:4 
有100%准确率的算法吗(除了查字典)?
2019-05-20 16:32
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:307
专家分:10
注 册:2014-1-16
  得分:0 
xuminxz师傅,用您的方法改了不行,输“中华人民共和国”显示ZHRLGHG,还是有错误。厨师王德榜师傅,您说的木瓜老师的类库在哪里?能告诉我吗?
2019-05-20 16:52
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:185
帖 子:7649
专家分:18794
注 册:2012-2-5
  得分:4 
如果不能解决多音字问题,查字典准确率也达不到100%

坚守VFP最后的阵地
2019-05-20 18:40
schtg
Rank: 8Rank: 8
等 级:贵宾
威 望:24
帖 子:673
专家分:949
注 册:2012-2-29
  得分:4 
不可能100%的,有些需要手动更正的。
2019-05-20 20:05
xuminxz
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:201
专家分:560
注 册: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.029133 second(s), 8 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved