if(x[2] < y[2])then end_n = x[2]; else end_n = y[2]; end; end; end;
local n2 = end_n - start_n; if(n2 > n)then n = n2; end; end;
print("最大重叠区间大小"..n);
delay( _CMD_LOOP )
]]> </脚本区块> <数据区块 /> </ApeML> 第三题 字符串替换(30分)
题目描述:请编写程序,根据指定的对应关系,把一个文本中的字符串替换成另外的字符串。 输入数据:程序读入已被命名为text.txt和dict.txt的两个输入数据文本文件,text.txt为一个包含大量字符串(含中文)的文本,以whitespace为分隔符;dict.txt为表示字符串(s1)与字符串(s2)的对应关系的另一个文本(含中文),大约在1万行左右,每行两个字符串(即s1和s2),用一个\t或空格分隔。dict.txt中各行的s1没有排序,并有可能有重复,这时以最后出现的那次s1所对应的s2为准。text.txt和dict.txt中的每个字符串都可能包含除whitespace之外的任何字符。text.txt中的字符串必须和dict.txt中的某s1完全匹配才能被替换。(为便于调试,您可下载测试text.txt和dict.txt文件,实际运行时我们会使用不同内容的输入文件。)
输出数据:在标准输出上打印text.txt被dict.txt替换后了的整个文本。
评分标准:程序输出结果必须正确,内存使用越少越好,程序的执行时间越快越好。
print(str);
txt = [[字符串 『开玩笑』 每行 『我晕』 替换 『乱搞』 下载 『小偷』 输出 『再晕』 ]]
tab = string.split( txt ,"\n"); --把多行拆分到一个数组
for k,v in pairs(tab) do local t = string.split( v.." " ," \t") --把当前值拆分成前后两个数字
t[1] = string.trim(t[1] ,"%s"); --去掉各种空白字符 t[2] = string.trim(t[2] ,"%s"); --去掉各种空白字符
str = string.gsub(str,t[1],t[2]); print(t[1],t[2]) end;
print(""); print(""); print("上面的文本替换以后的结果"); print(str);
delay( _CMD_LOOP ) 第四题 低频词过滤(40分)
题目描述:请编写程序,从包含大量单词的文本中删除出现次数最少的单词。如果有多个单词都出现最少的次数,则将这些单词都删除。 输入数据:程序读入已被命名为corpus.txt的一个大数据量的文本文件,该文件包含英文单词和中文单词,词与词之间以一个或多个whitespace分隔。(为便于调试,您可下载测试corpus.txt文件,实际运行时我们会使用不同内容的输入文件。)
输出数据:在标准输出上打印删除了corpus.txt中出现次数最少的单词之后的文本(词与词保持原来的顺序,仍以空格分隔)。
评分标准:程序输出结果必须正确,内存使用越少越好,程序的执行时间越快越好。
print(str);
tab = string.split( str ," "); --把多行拆分到一个数组
tab2 = {};
for k,v in pairs(tab) do if(tab2[v])then tab2[v] = tab2[v] + 1; --这个关键字出现的次数加一 else tab2[v] = 1; end; end;
--取得取出最低频率单司的出现次数 min = 999999999999999; for k,v in pairs(tab2) do if(v < min)then min = v end; end;
for k,v in pairs(tab2) do if(v == min)then --删除低频单词 str = string.gsub(str,k,""); end; end;
print(""); print("出现最少的次数"..min); print("上面的文本分析以后的结果"); print(str);
delay( _CMD_LOOP ) (出处:清风学院)
上一篇:Windows API-GDI入门基础知识详解(2)
下一篇:C/C++头文件一览
|