易码技术论坛

 找回密码
 加入易码
搜索
查看: 253719|回复: 4

[分享]自定义的字符串映射

[复制链接]
发表于 2007-7-13 18:16:47 | 显示全部楼层
还有更简单的???
一捧米,来分享一下吧!
发表于 2007-7-13 21:05:08 | 显示全部楼层
具体怎么做我没时间研究了,最近实在太忙,抱歉了~
但有个大体方向:所有英文或字符在ASCII码表里都有,所以作成数字对数字映射就够了,没必要自己定义。至于SIN之类的3字符映射,就可以用DATA管理了,更方便。
发表于 2007-7-14 00:26:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2007-7-14 10:53:02 | 显示全部楼层
LS同意什么啊,有时间的话帮忙写出来就好了
 楼主| 发表于 2007-7-13 18:05:01 | 显示全部楼层 |阅读模式
在我编写的作图程序中,为了使用方便,需要自定义字符串
用最直接也是最SB的方法是这样的:
30 LOCATE 1,6RINT P$;
31 W=ASC(INKEY$):IF W=99 THEN P$=P$+"EXP(":K=3
32 IF W=113 THEN P$=P$+"SIN(":K=3
33 IF W=119 THEN P$=P$+"COS(":K=3
34 IF W=101 THEN P$=P$+"TAN(":K=3
35 IF W=97 THEN P$=P$+"LOG(":K=3
36 IF W=100 THEN P$=P$+"^"
37 IF W=102 THEN P$=P$+"SQR(":K=3
38 IF W=122 THEN K=K=0:IF K THEN P$=P$+"(" ELSE P$=P$+")"
39 IF W=120 THEN P$=P$+"X"
40 IF W=21 THEN P$=P$+"+"
41 IF W=20 THEN P$=P$+"-"
42 IF W=108 THEN P$=P$+"*"
43 IF W=111 THEN P$=P$+"/"
44 IF W=32 THEN P$=P$+"="
45 IF W=22 THEN P$=P$+">"
46 IF W=23 THEN P$=P$+"<"
47 IF W=46 THEN P$=P$+"."
48 IF W=48 THEN P$=P$+"0"
49 IF W=98 THEN P$=P$+"1"
50 IF W=110 THEN P$=P$+"2"
51 IF W=109 THEN P$=P$+"3"
52 IF W=103 THEN P$=P$+"4"
53 IF W=104 THEN P$=P$+"5"
54 IF W=106 THEN P$=P$+"6"
55 IF W=116 THEN P$=P$+"7"
56 IF W=121 THEN P$=P$+"8"
57 IF W=117 THEN P$=P$+"9"
58 IF W=115 THEN P$=P$+"ABS(":K=3
59 IF W=29 AND K-2 THEN IF LEN(P$)>1 THEN P$=LEFT$(P$,LEN(P$)-1)ELSE P$=""
60 IF W=29 AND K=2 THEN IF LEN(P$)>4 THEN K=0$=LEFT$(P$,LEN(P$)-4)ELSE P$="":K=0
61 IF W=27 THEN 800
62 IF K>1 THEN K=K-1
63 IF W-13 THEN 30

经windybell点拨之后发现了以下自定义的字符串映射的改进版,是这样的:
30 X1$=CHR$(60)+CHR$(62)+CHR$(21)+CHR$(20)+"dxlo .0bnmghjtyu":Y1$="<>+-^X*/=.0123456789":定义一个1对1的映射,具体在39~41行实施
31 X2$="cqweasf":Y2$="EXPSINCOSTANLOGABSSQR":定义一个1对3的映射,具体在34~36行实施
32 LOCATE 1,6RINT P$;
33 W=ASC(INKEY$)
34 FOR I=0 TO 6
35 IF CHR$(W)=MID$(X2$,I+1,1)THEN P$=P$+MID$(Y2$,I*3+1,3)+"(":K=3
36 NEXT
38 IF W=122 THEN K=K=0:IF K THEN P$=P$+"(" ELSE P$=P$+")"
39 FOR I=1 TO 18
40 IF CHR$(W)=MID$(X1$,I,1)THEN P$=P$+MID$(Y1$,I,1)
41 NEXT
59 IF W=29 AND K-2 THEN IF LEN(P$)>1 THEN P$=LEFT$(P$,LEN(P$)-1)ELSE P$=""
60 IF W=29 AND K=2 THEN IF LEN(P$)>4 THEN K=0:P$=LEFT$(P$,LEN(P$)-4)ELSE P$="":K=0
61 IF W=27 THEN 800
62 K=K-(K>1)
63 IF W-13 THEN 30
这样改动之后代码缩减了400个字节

不过一捧米说还有更简单的方法,搞得我跟windybell都一头雾水,如果有谁知道的话分享一下也不妨啊^_^
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-3-29 10:23 , Processed in 0.009572 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表