将以下代码保存为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