查找字符串的所有大写字母/小写字母/混合字母组合
2015-11-1 16:11:1
收藏:0
阅读:111
评论:3
我需要用 Lua 为游戏服务器制作这个。。
我想要能够将一个名称的所有组合保存到一个字符串中,然后可以与以下内容一起使用:
if exists (string)
例如:
ABC_-123
aBC_-123
AbC_-123
ABc_-123
abC_-123
等等
在游戏中,只能使用数字,字母和_ -作为名称。
(A_B-C, A-B.C, AB_8 ...等)
我明白逻辑,但不知道如何编写代码:D
0-Lower
1-Upper
然后
000
001
等等。
点赞
用户1881196
你可以使用递归生成器。第一个参数包含到目前为止已生成的字符串的左部分,第二个参数是原始字符串的剩余右部分。
function combinations(s1, s2)
if s2:len() > 0 then
local c = s2:sub(1, 1)
local l = c:lower()
local u = c:upper()
if l == u then
combinations(s1 .. c, s2:sub(2))
else
combinations(s1 .. l, s2:sub(2))
combinations(s1 .. u, s2:sub(2))
end
else
print(s1)
end
end
因此,可以通过以下方式调用该函数。
combinations("", "ABC_-123")
你只需要存储中间结果而不是打印它们。
2015-11-01 16:49:06
用户3979429
如何做到这一点?
Lua 中有本地函数可以生成字符串的所有排列,但这里有一些可能有用的东西。
子串
这可能是最简单的解决方法,但同时也是最不灵活的。而不是组合,您可以检查指定字符串中是否存在子字符串。
if str:find(substr) then
--code
end
如果这解决了您的问题,我强烈推荐它。
获取所有排列
一种更昂贵,但仍然有效的解决方法。这几乎做到了您所要求的。
function GetScrambles(str, tab2)
local tab = {}
for i = 1,#str do
table.insert(tab, str:sub(i, i))
end
local tab2 = tab2 or {}
local scrambles = {}
for i = 0, Count(tab)-1 do
local permutation = ""
local a = Count(tab)
for j = 1, #tab do
tab2[j] = tab[j]
end
for j = #tab, 1, -1 do
a = a / j
b = math.floor((i/a)%j) + 1
permutation = permutation .. tab2[b]
tab2[b] = tab2[j]
end
table.insert(scrambles, permutation)
end
return scrambles
end
您要求的
基本上这将完全符合您最初的要求。这与上面的代码相同,除了字符串的每个子字符串。
function GetAllSubstrings(str)
local substrings = {}
for i = 1,#str do
for ii = i,#str do
substrings[#substrings+1] = str:sub(ii)
end
end
return substrings
end
首字母大写
您必须基本上,对于每个排列,使其与所有可能的大写字母组合在一起。
这应该不太难,我相信您可以编写它 :)
你在开玩笑吗?
在此之后,您可能会想知道。这真的有必要吗?这好像有点过分!
答案取决于您在做什么。您真的需要给定字符的所有组合吗?我不这么认为。在评论中,您说您需要它以实现不区分大小写...但您是否知道您可以将其转换为小写/大写?这非常简单
local str = "hELlO"
print(str:lower())
print(str:upper())
这是您应该存储名称的方式,否则应保留区分大小写。
您决定
现在您决定要做什么。无论您选择哪个方向,我祝您好运!
2015-11-01 20:49:51
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
如果您只对
exists函数感兴趣,那么您不需要所有的组合。local stored_string = "ABC_-123" function exists(tested_string) return stored_string:lower() == tested_string:lower() end您只需要在不区分大小写的情况下比较存储的字符串和测试的字符串即可。
很容易进行测试:
assert(exists("abC_-123")) assert(not exists("abd_-123"))