Lua中的string.find无法找到一行中的最后一个单词。

这是在《Lua 程序设计》一书中的一个案例。以下是代码,我的问题是为什么它无法获取行的最后一个单词?

function allwords()
   local line=io.read()
   local pos=1
   return function ()
      while line do
         local s,e=string.find(line,"%w+ ",pos)
         if s then
            pos=e+1
            return string.sub(line,s,e)
         else
            line=io.read()
            pos=1
         end
      end
      return nil
   end
end

for word in allwords() do
   print(word)
end
点赞
用户1009479
用户1009479

在这一行中:

local s,e=string.find(line,"%w+ ",pos)
--                             ^

模式"%w+ "中包含一个空格,因此它匹配一个单词后面紧跟着一个空格。当你输入例如 word1 word2 word3 并按 Enter 键时,word3 后面没有空格。

在书本的示例中没有空格:

local s, e = string.find(line, "%w+", pos)
2015-02-11 04:25:54
用户3979429
用户3979429

抱歉,嗯,让这个问题“复活”,但我认为我有更好的解决方案。

不使用您的_allwords_ 函数,您不能只是这样做:

for word in io.read():gmatch("%S+") do
   print(word)
end

函数

gmatch("%S+")

返回字符串中的所有单词。

2015-02-22 21:35:57