用lua语言编程:输入一个字符串,长度不超过50,要求求出字符串中任意字符出现的次数。

2024-11-07 21:40:58
推荐回答(1个)
回答(1):

将以下代码保存为lua_string.lua:

#!/usr/bin/env lua 
s = {}
a = io.read()                                   -- 读入字符串,可含汉字
len = #(string.gsub(a, "[\128-\191]", ""))      -- 计算字符数(不是字节数)
print(len)
for c in string.gmatch(a, ".[\128-\191]*") do   -- 迭代出每一个字符
    if s[c] == nil then                         -- 并计算出现次数
        s[c] = 1
    else
        s[c] = s[c]+1
    end
end
for k,v in pairs(s) do                          -- 打印结果
    print(k, v)
end

虽然题主没有特别提到对unicode友好,不过考虑到多字节字符现在很常用,所以把utf-8的支持也加进去了。

其中的知识点,参考《Programming in LUA》第三版中以下章节:

-- 2.1 Nil
-- 4.3 Control Structures
-- 7.2 The Semantics of the Generic for
-- 21.1 Basic String Functions
-- 21.2 Pattern-Matching Functions
-- 21.7 Unicode
-- 22.1 The Simple I/O Model


测试输出如下:

moose@debian:~/Code/baidu_knowledge/lua_string$ ./lua_string.lua 
nihao你好
7
a    1
h    1
好    1
i    1
你    1
o    1
n    1
moose@debian:~/Code/baidu_knowledge/lua_string$ ./lua_string.lua 
你好你好
4
好    2
你    2
moose@debian:~/Code/baidu_knowledge/lua_string$ ./lua_string.lua 
用lua语言编程:输入一个字符串,长度不超过50,要求求出字符串中任意字符出现的次数。
43
a    1
符    3
一    1
中    1
,    2
不    1
求    2
串    2
l    1
0    1
度    1
超    1
u    1
出    2
数    1
个    1
次    1
输    1
程    1
:    1
的    1
意    1
语    1
编    1
。    1
入    1
现    1
用    1
长    1
任    1
5    1
字    3
言    1
要    1
过    1