littleknife 发表于 2010-11-30 15:51:48

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

设定一个字符串: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="e;e;e;w;w;"
string_table="wa(1);"
string_table="w;"
string_table="wa(1)"
string_table="e;e;w;e"
string_table="wa(4)"
string_table="u;d;e;w;e;"
string_table="wa(1)"
string_table="s;sw;
string_table="wa(2)"
string_table="e;e;e;e;w;"
string_table="wa(1)"
string_table="w;u;d;sw;e"
string_table="wa(1)"
string_table="se;su;sd;"

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

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

[ 本帖最后由 littleknife 于 2010-11-30 03:53 PM 编辑 ]

ddid 发表于 2010-11-30 16:04:14

1. 以字符串中原有的wa(?)切割字符串。

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

3. 重新连接字符串。

littleknife 发表于 2010-11-30 16:12:20

目前,没有找到合适的分割方法。能否指点一下。如果这个思路可行当然是最好的。
现在考虑用最笨的方法:是遍历整个字符串所形成的表格。来逐个核对是否存在wa(i),同时计数,若大于规定值则插入wa(1)。

littleknife 发表于 2010-11-30 16:36:02

我现在的代码如下:运行后出现下面的问题,不知道是怎么回事:请帮忙看看哪里的问题。谢谢!
--运行结果
1 e;e;e;w;w;
2 wa(1)
3            ---------这里不应该是空。
4 wa(1);
5 e;e;w;e;
6 wa(4);
7 u;d;e;w;e;
8 wa(1)
9 sw;
10 wa(2);
11 e;e;e;e;w;
12 wa(1)
13 u;d;sw;e;se;
14 wa(1)-----------------------后半部分没有了。不清楚怎么回事。。

   nowait_string_num=0
   wait_step=5
   nowait_string=""
   nowait_string_num=0
   temp_path_table={}
   insert_string="wa(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;"
   final_path_table=utils.split(str,";")

for k,v in pairs(final_path_table) do
   if string.sub (v, 1, 2)=="wa" or nowait_string_num>=wait_step then
      table.insert(temp_path_table,nowait_string)
   if string.sub (v, 1, 2)=="wa" then
         table.insert(temp_path_table,v..";")
   end
   if nowait_string_num>=wait_step then
      table.insert(temp_path_table,insert_string)
   end

      nowait_string_num=0
      nowait_string=""

   else
      nowait_string_num=nowait_string_num+1
      nowait_string=nowait_string..v..";"
   end--if
end
table.foreach(temp_path_table, print)

[ 本帖最后由 littleknife 于 2010-11-30 04:57 PM 编辑 ]

ddid 发表于 2010-11-30 17:02:22

原帖由 littleknife 于 2010-11-30 16:12 发表 http://pkuxkx.net/forum/images/common/back.gif
目前,没有找到合适的分割方法。能否指点一下。如果这个思路可行当然是最好的。


分割?

你不是已经在用 utils.split() 分割了么?

littleknife 发表于 2010-11-30 17:04:27

utils.split() 不能分割动态的wa(i)格式的字符串啊?它能分割吗?不会哦。。。只看到里面的是;,这些能分。

ddid 发表于 2010-11-30 17:09:25

噢,呵呵,刚知道 utils.split() 的 pat 必须为单个字符。

去 lua 的官方网站,找个 split() 函数下载吧。

jason 发表于 2010-11-30 17:12:39

等效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
line = ""
for e in arr:
      if e <> "wa":
                if count >= wait_step:
                        result.append(line)
                        result.append("wa(1)")
                        count = 0
                        line = ""
                line = line + e + ";"
                count = count + 1
      else:
                if len(line) <> 0:
                        result.append(line)
                        count = 0
                        line = ""
                result.append(e)

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

print result

littleknife 发表于 2010-11-30 17:14:07

yct30 yct30 逃避问题!!你个胸毛。。。。yct38 yct38
能帮我看看哪里出错也成啊。。。就不用去找split了。不是吗。嘿嘿。
yct10 yct10 yct10 yct10

ddid 发表于 2010-11-30 17:20:22

原帖由 <i>jason</i> 于 2010-11-30 17:12 发表 <a href="http://pkuxkx.net/forum/redirect.php?goto=findpost&pid=208930&ptid=17539" target="_blank"><img src="http://pkuxkx.net/forum/images/common/back.gif" border="0"   alt="" /></a><br />
等效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;"<br />
<br />
arr = str.split(";"<img src="images/smilies/default/wink.gif" smilieid="4" border="0" alt="" /><br />
result = []<br />
count = 0<br />
wait_step = 5<br />
lin ...

yct23

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

[ 本帖最后由 ddid 于 2010-11-30 05:21 PM 编辑 ]
页: [1] 2 3 4
查看完整版本: 再次请教一个字符串处理问题。(mush lua)