北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 15308|回复: 32

再次请教一个字符串处理问题。(mush lua)

[复制链接]
发表于 2010-11-30 15:51:48 | 显示全部楼层 |阅读模式
设定一个字符串:str="e;e;e;w;w;w;wa(1);e;e;w;e;wa(4);u;d;e;w;e;s;sw;wa(2);e;e;e;e;w;w;u;d;sw;e;se;su;sd;"

没有遇到wa(i)的时候,每5个字符串后面加入一个wa(1)。就是wa(i)的间隔不能超过5,超过则用wa(1)插入。

最后形成下面的一个表格:以wa(i)为分割。wa(i)是其中一个表的值。
如上面字符串,处理后得到的应是:
string=e;e;e;w;w;wa(1);w;wa(1);e;e;w;e;wa(4);u;d;e;w;e;wa(1);s;sw;wa(2);e;e;e;e;w;wa(1);w;u;d;sw;e;wa(1);se;su;sd;"
string_table[1]="e;e;e;w;w;"
string_table[2]="wa(1);"
string_table[3]="w;"
string_table[4]="wa(1)"
string_table[5]="e;e;w;e"
string_table[6]="wa(4)"
string_table[7]="u;d;e;w;e;"
string_table[8]="wa(1)"
string_table[9]="s;sw;
string_table[10]="wa(2)"
string_table[11]="e;e;e;e;w;"
string_table[12]="wa(1)"
string_table[13]="w;u;d;sw;e"
string_table[14]="wa(1)"
string_table[15]="se;su;sd;"

核心目的:就是用wa(i)分割了字符串并同时存到一个表内。前提是如果设定字符串内的wa(i)的间隔大于5,就需要插入一个wa(1)。

请各位大侠指点一二。谢谢!!

[ 本帖最后由 littleknife 于 2010-11-30 03:53 PM 编辑 ]
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-11-30 16:04:14 | 显示全部楼层
1. 以字符串中原有的wa(?)切割字符串。

2. 对每个切割出的字符串做插入 wa(1) 的操作。
(插入时判断字符串长度,其实是判断“;”少于4个 “;”就不插入。)

3. 重新连接字符串。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2010-11-30 16:12:20 | 显示全部楼层
目前,没有找到合适的分割方法。能否指点一下。如果这个思路可行当然是最好的。
现在考虑用最笨的方法:是遍历整个字符串所形成的表格。来逐个核对是否存在wa(i),同时计数,若大于规定值则插入wa(1)。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2010-11-30 16:36:02 | 显示全部楼层
我现在的代码如下:运行后出现下面的问题,不知道是怎么回事:请帮忙看看哪里的问题。谢谢!

  1. --运行结果
  2. 1 e;e;e;w;w;
  3. 2 wa(1)
  4. 3              ---------这里不应该是空。
  5. 4 wa(1);
  6. 5 e;e;w;e;
  7. 6 wa(4);
  8. 7 u;d;e;w;e;
  9. 8 wa(1)
  10. 9 sw;
  11. 10 wa(2);
  12. 11 e;e;e;e;w;
  13. 12 wa(1)
  14. 13 u;d;sw;e;se;
  15. 14 wa(1)  -----------------------后半部分没有了。不清楚怎么回事。。
复制代码

  1.      nowait_string_num=0
  2.      wait_step=5
  3.      nowait_string=""
  4.      nowait_string_num=0
  5.      temp_path_table={}
  6.      insert_string="wa(1)"


  7.    str="e;e;e;w;w;w;wa(1);e;e;w;e;wa(4);u;d;e;w;e;s;sw;wa(2);e;e;e;e;w;w;u;d;sw;e;se;su;sd;"
  8.    final_path_table=utils.split(str,";")

  9. for k,v in pairs(final_path_table) do
  10.    if string.sub (v, 1, 2)=="wa" or nowait_string_num>=wait_step then
  11.         table.insert(temp_path_table,nowait_string)
  12.      if string.sub (v, 1, 2)=="wa" then
  13.          table.insert(temp_path_table,v..";")
  14.      end
  15.      if nowait_string_num>=wait_step then
  16.         table.insert(temp_path_table,insert_string)
  17.      end

  18.         nowait_string_num=0
  19.         nowait_string=""

  20.    else
  21.         nowait_string_num=nowait_string_num+1
  22.         nowait_string=nowait_string..v..";"
  23.    end--if
  24. end
  25. table.foreach(temp_path_table, print)
复制代码

[ 本帖最后由 littleknife 于 2010-11-30 04:57 PM 编辑 ]
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-11-30 17:02:22 | 显示全部楼层
原帖由 littleknife 于 2010-11-30 16:12 发表
目前,没有找到合适的分割方法。能否指点一下。如果这个思路可行当然是最好的。


分割?

你不是已经在用 utils.split() 分割了么?
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2010-11-30 17:04:27 | 显示全部楼层
utils.split() 不能分割动态的wa(i)格式的字符串啊?它能分割吗?不会哦。。。只看到里面的是;,这些能分。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-11-30 17:09:25 | 显示全部楼层
噢,呵呵,刚知道 utils.split() 的 pat 必须为单个字符。

去 lua 的官方网站,找个 split() 函数下载吧。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-11-30 17:12:39 | 显示全部楼层
等效python代码。lua是06年用过的,忘记光了。
  1. str="e;e;e;w;w;w;wa(1);e;e;w;e;wa(4);u;d;e;w;e;s;sw;wa(2);e;e;e;e;w;w;u;d;sw;e;se;su;sd;"

  2. arr = str.split(";")
  3. result = []
  4. count = 0
  5. wait_step = 5
  6. line = ""
  7. for e in arr:
  8.         if e[0:2] <> "wa":
  9.                 if count >= wait_step:
  10.                         result.append(line)
  11.                         result.append("wa(1)")
  12.                         count = 0
  13.                         line = ""
  14.                 line = line + e + ";"
  15.                 count = count + 1
  16.         else:
  17.                 if len(line) <> 0:
  18.                         result.append(line)
  19.                         count = 0
  20.                         line = ""
  21.                 result.append(e)

  22. if len(line) <> 0:
  23.         result.append(line)

  24. print result
复制代码
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2010-11-30 17:14:07 | 显示全部楼层
逃避问题!!你个胸毛。。。。
能帮我看看哪里出错也成啊。。。就不用去找split了。不是吗。嘿嘿。
0 0 0 0
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-11-30 17:20:22 | 显示全部楼层
原帖由 jason 于 2010-11-30 17:12 发表

等效python代码。lua是06年用过的,忘记光了。str="e;e;e;w;w;w;wa(1);e;e;w;e;wa(4);u;d;e;w;e;s;sw;wa(2);e;e;e;e;w;w;u;d;sw;e;se;su;sd;"



arr = str.split(";"

result = []

count = 0

wait_step = 5

lin ...




用 MUSH 吧,很快会让你想起 Lua !

[ 本帖最后由 ddid 于 2010-11-30 05:21 PM 编辑 ]
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-24 02:28 PM , Processed in 0.010910 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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