文字MUD游戏论坛-天下泥潭群英会-水泊梁山

文字MUD游戏论坛-天下泥潭群英会-水泊梁山 (http://www.aolai.org/forums/)
-   『 机器人制作及下载 』 (http://www.aolai.org/forums/f5/)
-   -   请教 如何转换中文数字为阿拉伯数字? (http://www.aolai.org/forums/t15220/)

mdcfil 2009-05-16 12:03

请教 如何转换中文数字为阿拉伯数字?
 
如题,在编写解迷机器时,最后涉及清理垃圾的问题,我用的是#trigger {$s%x~({*}~)} {drop %1}这个触发,但首先要将金子和银子以及钱物等存掉。否则会一起扔掉。开始我想到用#trigger {{金子|银子|钱}} {#gag}这个触发来避免丢钱的动作,但不管用。不知道谁有好的办法。另外也请教下将中文数字转换为阿拉伯数字的方法。多谢!!

liccry 2009-05-16 18:25

回复: 请教 如何转换中文数字为阿拉伯数字?
 
有两种解决方案,给你转一下吧:

1.
#if %1=一 {%2=1}
#if %1=二 {%2=2}
.... ....
#if %1=十 {%2=10}
这部分是 alias change
#variable temporary1 {0} {0}
#variable temporary2 {0} {0}
#variable temporary3 {0} {0}
#variable temporary4 {0} {0}
#variable temporary5 {0} {0}
#if %pos(万,%1) {change %left(%1,%pos(万,%1)-1) temporary1}
#if %pos(千,%1) {change %rightback(%left(%1,%pos(千,%1)-1),2) temporary2}
#if %pos(百,%1) {change %rightback(%left(%1,%pos(百,%1)-1),2) temporary3}
#if %pos(十,%1) {change %rightback(%left(%1,%pos(十,%1)-1),2) temporary4}
#if %pos(十,%1) {change %rightback(%1,2) temporary5}
#if (@temporary5>9) {temporary5=0}
#if (%begins(%1,十)) {temporary4=1}
#math %2 (10000*@temporary1+1000*@temporary2+
100*@temporary3+10*@temporary4+@temporary5) (这行和上一行是同一行)
这部分是alias changeall

2.
new一个alias 名称为convert,value为 number=%1;
number=%replace( @number, 零, 0) ;number=%replace( @number, 一, 1); .......
number=%replace( @number, 八, 8);number=%replace( @number, 九, 9);
number=%replace( @number, 十, "*10+") ;number=%replace( @number, 百, "*100+");
number=%replace( @number, 千, "*1000+");number=%replace( @number, 万, "*10000+");
number=%replace( @number, " ", "")
#if (%ends( @number, +)) {number=%concat( @number, 0)}
#if (%begins( @number, *)) {number=%concat( 1, @number)}
number=%eval( @number)
#show @number
用法是convert后面加中文数字,结果输出阿拉伯数字
原理是把中文数字逐一转换为计算式子,通过%eval运算
但是范围是小于10w
有兴趣的人可以想想原因,以及如何计算超过10w的
希望对你们写机器有帮助
另注: 我用的是721, 如果你用的是555及以下版本,去掉语句中间的空格

mdcfil 2009-05-16 18:54

回复: 请教 如何转换中文数字为阿拉伯数字?
 
1.
#if %1=一 {%2=1}

这个语句我开始也试过,不知道为啥,不起作用,不能正确赋值。注:我用的462编写的解迷机器。

2、这部分是 alias change
#variable temporary1 {0} {0}
#variable temporary2 {0} {0}
#variable temporary3 {0} {0}
#variable temporary4 {0} {0}
#variable temporary5 {0} {0}
#if %pos(万,%1) {change %left(%1,%pos(万,%1)-1) temporary1}
#if %pos(千,%1) {change %rightback(%left(%1,%pos(千,%1)-1),2) temporary2}
#if %pos(百,%1) {change %rightback(%left(%1,%pos(百,%1)-1),2) temporary3}
#if %pos(十,%1) {change %rightback(%left(%1,%pos(十,%1)-1),2) temporary4}
#if %pos(十,%1) {change %rightback(%1,2) temporary5}
#if (@temporary5>9) {temporary5=0}
#if (%begins(%1,十)) {temporary4=1}
#math %2 (10000*@temporary1+1000*@temporary2+
100*@temporary3+10*@temporary4+@temporary5) (这行和上一行是同一行)
这部分是alias changeall

第二部分看不太懂,大侠能不能给个简短的说明,我也再研究下mud指令和函数。先谢了!!

3.
new一个alias 名称为convert,value为 number=%1;
number=%replace( @number, 零, 0) ;number=%replace( @number, 一, 1); .......
number=%replace( @number, 八, 8);number=%replace( @number, 九, 9);
number=%replace( @number, 十, "*10+") ;number=%replace( @number, 百, "*100+");
number=%replace( @number, 千, "*1000+");number=%replace( @number, 万, "*10000+");
number=%replace( @number, " ", "")
#if (%ends( @number, +)) {number=%concat( @number, 0)}
#if (%begins( @number, *)) {number=%concat( 1, @number)}
number=%eval( @number)
#show @number

%replace的命令在462下面运用貌似有问题,我试过{%replace(二十,二十,20);%replace(三十,三十,30)}这个语句,每次不管触发数字是二十还是三十,结果返回值都是30,不知道问题出在什么地方,望高手指教。这里我用具体数字替代了变量。另外赋值的变量省略了。

liccry 2009-05-16 20:13

回复: 请教 如何转换中文数字为阿拉伯数字?
 
引用:

作者: mdcfil (帖子 102233)
1.
#if %1=一 {%2=1}

这个语句我开始也试过,不知道为啥,不起作用,不能正确赋值。注:我用的462编写的解迷机器。

2、这部分是 alias change
#variable temporary1 {0} {0}
#variable temporary2 {0} {0}
#var...

简单说,就是%pos找到"万"字对应的位置,比如字串“一万”,万对应的位置是3,然后用alias change,把万之前的一个汉字转化为数字,然后赋给temporary1,然后是千,百,十,最后将temporary1到5进行计算,这个方法最多能计算99999,再多就会出问题。

至于你说的%replace的问题,我想可能跟你replace的字符中都有“十”有关,可以这样解决:
temp=二十
temp=%replace(@temp,二,2)
temp=%replace(@temp,三,3)
temp=%replace(@temp,十,*10)
temp=%eval(@temp)
#SA @temp

然后更改temp的汉字表述为二十或者三十,看看结果是否正确。
这个就是方法二的简单表述。

mdcfil 2009-05-17 18:54

回复: 请教 如何转换中文数字为阿拉伯数字?
 
去试试看,谢了。。。。。。。。。。

kulak 2009-05-28 15:04

回复: 请教 如何转换中文数字为阿拉伯数字?
 
不知道怎么样,学习学习

shle 2009-06-02 18:00

回复: 请教 如何转换中文数字为阿拉伯数字?
 
看的人一个头两个大了还没看来是怎么回事

net0532 2009-06-05 23:54

回复: 请教 如何转换中文数字为阿拉伯数字?
 
很强大~~~很复杂:em01:

xyuer 2009-11-11 03:41

回复: 请教 如何转换中文数字为阿拉伯数字?
 
引用:

作者: net0532 (帖子 102645)
很强大~~~很复杂:em01:

4.62可以用的:
#alias tran {#var %1 0;#var tr_num %2;tr_num=%remove("零",@tr_num);tr_num=%replace(@tr_num,"一","1");tr_num=%replace(@tr_num,"二","2");tr_num=%replace(@tr_num,"三","3");tr_num=%replace(@tr_num,"四","4");tr_num=%replace(@tr_num,"五","5");tr_num=%replace(@tr_num,"六","6");tr_num=%replace(@tr_num,"七","7");tr_num=%replace(@tr_num,"八","8");tr_num=%replace(@tr_num,"九","9");#if %pos("十",@tr_num)=1 {tr_num=%replace(@tr_num,"十","10|")} {tr_num=%replace(@tr_num,"十","0|")};tr_num=%replace(@tr_num,"百","00|");tr_num=%replace(@tr_num,"千","000|");tr_num=%replace(@tr_num,"万","0000|");#forall @tr_num {#add %1 %i}}

用法:tran result "八万八千八百八十八"
然后@result就会被赋值为88888

fyun 2009-12-04 14:41

回复: 请教 如何转换中文数字为阿拉伯数字?
 
巨蟒怪一把抓住了你!

aatgf 2010-01-11 21:22

回复: 请教 如何转换中文数字为阿拉伯数字?
 
这么复杂,先收藏了,
学习学习

esp 2010-01-27 01:13

回复: 请教 如何转换中文数字为阿拉伯数字?
 
zmud里面有这样的函数? tran?学习一下

jack100344 2010-02-02 20:52

回复: 请教 如何转换中文数字为阿拉伯数字?
 
好好学习下!!!!!!

suming 2012-08-18 15:03

回复: 请教 如何转换中文数字为阿拉伯数字?
 
:em25::em16::em07::em01:啊啊 为什么我什么为什么为什么
啊啊 为什么我什么为什么为什么
:em05::em08:

cjsscn 2012-10-15 16:55

回复: 请教 如何转换中文数字为阿拉伯数字?
 
收藏了,还是很有用啊,我就碰到了#slow .111 只走一步的情况,看了你的帖子终于知道怎么设置了,要是多些这样的帮助帖就太好了,新手好难啊

yeyu 2013-02-06 12:11

回复: 请教 如何转换中文数字为阿拉伯数字?
 
我用的方法比较死板,以转换金创药的数量为例:
#tr {(*)包金创药~(*}
{
yao_num=%trim(%1);
yao_num=%replace(@yao_num,"零","");yao_num=%replace(@yao_num,"一",1);yao_num=%replace(@yao_num,"二",2);yao_num=%replace(@yao_num,"三",3);yao_num=%replace(@yao_num,"四",4);yao_num=%replace(@yao_num,"五",5);yao_num=%replace(@yao_num,"六",6);yao_num=%replace(@yao_num,"七",7);yao_num=%replace(@yao_num,"八",8);yao_num=%replace(@yao_num,"九",9);yao_num=%replace(@yao_num,"百","*100+");yao_num=%replace(@yao_num,"十","*10+");yao_num=%eval(@yao_num)
}
因为我身上的药不会过千,就只转换到了百位,比如“一百一十二”,通过上面的逐一替换,变成1*100+1*10+2,然后用%eval()对表达式求值得出结果,复杂点的只要增加替换的语句就可以了

asteria 2013-12-30 23:04

回复: 请教 如何转换中文数字为阿拉伯数字?
 
引用:

作者: yeyu (帖子 113944)
我用的方法比较死板,以转换金创药的数量为例:
#tr {(*)包金创药~(*}
{
yao_num=%trim(%1);
yao_num=%replace(@yao_num,"零","");yao_num=%replace(@yao_num,"一",1);yao_num=%replace(@yao_num,"二",2);yao_num=%replace(@yao_num,"三",3);yao_num=%replace(@yao_num,"四",4);yao_num=%replace(@yao_num,"五",5);yao_num=%replace(@yao_num,"六",6);yao_num=%replace(@yao_num,"七",7);yao_num=%replace(@yao_num,"八",8);yao_num=%replace(@yao_num,"九",9);yao_num=%replace(@yao_num,"百","*100+");yao_num=%replace(@yao_num,"十","*10+");yao_num=%eval(@yao_num)
}
因为我身上的药不会过千,就只转换到了百位,比如“一百一十二”,通过上面的逐一替换,变成1*100+1*10+2,然后用%eval()对表达式求值得出结果,复杂点的只要增加替换的语句就可以了

死板吗?简单明了:em07::em07::em07:

jsflyer 2014-11-12 17:59

回复: 请教 如何转换中文数字为阿拉伯数字?
 
#tri (%x)支人参
renshen=%1;
renshen=%replace(@renshen,零,0);
renshen=%replace(@renshen,一,1);
renshen=%replace(@renshen,二,2);
renshen=%replace(@renshen,三,3);
renshen=%replace(@renshen,四,4);
renshen=%replace(@renshen,五,5);
renshen=%replace(@renshen,六,6);
renshen=%replace(@renshen,七,7);
renshen=%replace(@renshen,八,8);
renshen=%replace(@renshen,九,9);
renshen=%replace(@renshen,十,*10+);
renshen=%replace( @renshen,百,*100+);
renshen=%replace( @renshen,千,*1000+);
renshen=%replace( @renshen,万,*10000+);
renshen=%replace( @renshen," ","");
#if %pos(%rightback(@renshen,1),+) {renshen=%concat(@renshen,0)};
#if (%begins(@renshen,*)) {renshen=%concat(1,@renshen)};
renshen=%eval(@renshen)

临时启动 2016-03-19 13:39

回复: 请教 如何转换中文数字为阿拉伯数字?
 
先赚点梁山币,版主见谅啊。。。


所有时间均为格林尼治时间 +9, 现在的时间是 06:14.

Powered by SPLS
版权所有 2001-2023 水泊梁山
皖ICP备05012024号

站长 fengyue


Content Relevant URLs by vBSEO 3.6.1