再次请教一个字符串处理问题。(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 编辑 ] 1. 以字符串中原有的wa(?)切割字符串。
2. 对每个切割出的字符串做插入 wa(1) 的操作。
(插入时判断字符串长度,其实是判断“;”少于4个 “;”就不插入。)
3. 重新连接字符串。 目前,没有找到合适的分割方法。能否指点一下。如果这个思路可行当然是最好的。
现在考虑用最笨的方法:是遍历整个字符串所形成的表格。来逐个核对是否存在wa(i),同时计数,若大于规定值则插入wa(1)。 我现在的代码如下:运行后出现下面的问题,不知道是怎么回事:请帮忙看看哪里的问题。谢谢!
--运行结果
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 编辑 ] 原帖由 littleknife 于 2010-11-30 16:12 发表 http://pkuxkx.net/forum/images/common/back.gif
目前,没有找到合适的分割方法。能否指点一下。如果这个思路可行当然是最好的。
分割?
你不是已经在用 utils.split() 分割了么? utils.split() 不能分割动态的wa(i)格式的字符串啊?它能分割吗?不会哦。。。只看到里面的是;,这些能分。 噢,呵呵,刚知道 utils.split() 的 pat 必须为单个字符。
去 lua 的官方网站,找个 split() 函数下载吧。 等效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 yct30 yct30 逃避问题!!你个胸毛。。。。yct38 yct38
能帮我看看哪里出错也成啊。。。就不用去找split了。不是吗。嘿嘿。
yct10 yct10 yct10 yct10 原帖由 <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 编辑 ]