Lua string,在每个交替索引位置插入一个整数

假设我有一个包含"abcdef"的字符串。

str1 = "abcdef"

我想要有另一个字符串str2,它将拥有str1的所有字符,并且在每个交替的索引位置都有整数1,例如

str2:byte(1) = 1
str2:byte(2) = 'a'
str2:byte(3) = 1
str2:byte(4) = 'b'
str2:byte(5) = 1
str2:byte(6) = 'c'

以此类推....

我能用最快的方式做到这一点吗?

点赞
用户3455883
用户3455883

首先,在 Lua 中不能以这种方式进行分配,即 string.byte() 不用于设置字节。

您可以迭代 str1 中的字符,并通过以下方式逐个字符构建 str2

local str1 = "abc"
local str2 = ""
for i=1,#str1 do
    str2 = str2..string.sub(str1,i,i)..string.char(1)
end

当然,如果您打印 str2,它看起来像 str1,但它们的长度将不同:

print(str1,str2)
print(#str1, #str2)

给出如下输出:

abc     abc
3       6

另一方面,如果您 真正 想要生成像 "a1b1c1" 这样的字符串,则在遍历 str1 中的字符时,需要执行以下操作:

str2 = str2..string.sub(str1,i,i).."1"

如果您使用 string.byte() 来检查 str2

for i=1,#str2 do
     print( string.byte( str2, i ) )
end

您将得到如下结果

97
1
98
1
99
1

其中 97 是 'a' 的 ASCII 字节,98 是 'b' 的字节等。

2017-04-28 00:57:23
用户107090
用户107090

使用 gsub 让 Lua 做一些繁琐的工作:

str1 = "abcdef"
str2 = str1:gsub("(.)","%1\001")
print(str1:byte(1,-1))
print(str2:byte(1,-1))

输出结果:

97  98  99  100 101 102
97  1   98  1   99  1   100 1   101 1   102 1
2017-04-28 01:31:38