19、编写一个程序,它读取一系列单词(每行一个单词)直到输入结束,然后打印出每个单词出现次数的摘要。(提示:记住,当一个未定义的值被当作数字使用时,Perl 会自动将其转换为 0。回顾前面记录累计总数的练习可能会有帮助。)因此,如果输入的单词是 fred、barney、fred、dino、wilma、fred(都在不同的行上),输出应该告诉我们 fred 出现了 3 次。额外加分项:在输出中按代码点顺序对摘要中的单词进行排序。
my %count;
while (<>) {
chomp;
$count{$_}++;
}
foreach my $word (sort keys %count) {
print "$word was seen $count{$word} times.\n";
}
这段代码首先定义了一个哈希 %count 用于存储每个单词及其出现的次数。 while (<>) 循环会逐行读取输入, chomp 函数用于去掉每行末尾的换行符,然后将单词作为键,其出现次数作为值存储在 %count 哈希中。最后,使用 sort keys %count 按代码点顺序对单词进行排序,并打印出每个单词及其出现的次数。
20、编写一个程序,打印出输入中提到“fred”的每一行。(对于其他行输入不做任何处理。)如果输入字符串是“Fred”、“frederick”或“Alfred”,它会匹配吗?创建一个包含几行提到“fred flintstone”及其朋友的小文本文件,然后将该文件作为此程序的输入。
以下是实现该功能的Perl代码:
while (<>) {
if (/fred/) {
print;
}
}
对于输入字符串“Fred”,由于正则表达式是区分大小写的,所以不会匹配;而“frederick”和“Alfred”会匹配,因为它们都包含字符串“fred”。
你可以创建一个小文本文件,例如命名为 test.txt ,内容如下:
fred flintstone is a great character.
Wilma is fred's wife.
Barney is fred's friend.
This line has no mention of fred.
然后使用命令 perl your_script.pl test.txt 来运行程序,其中 your_script.pl 是上述代码保存的文件名。程序将会打印出包含“fred”的行。
21、修改一个原程序,使其能匹配Fred。若输入字符串是Fred、frederick或Alfred,修改后的程序是否能匹配这些字符串?(可将这些名字添加到文本文件中进行测试)
正则表达式是区分大小写的,原程序不匹配 Fred 。修改程序的一种方法是将使用的模式更改为 /[fF]red/ ,也可以尝试 /(f|F)red/ 或 /fred|Fred/ ,但字符类更高效。修改后,能匹配 Fred 、 frederick 和 Alfred ,因为这三个字符串都包含四个字母的字符串 fred (后面会介绍只匹配整个单词的功能,那样 frederick 和 Alfred 就不会匹配了)。
22、编写一个程序,打印输入中包含句点(.)的每一行,忽略其他行。用包含 ‘Mr. Slate’ 的小文本文件测试它,程序能识别出 ‘Mr. Slate’ 吗?
以下是实现该功能的Python代码示例:
while True:
try:
line = input()
if '.' in line:
print(line)
except EOFError:
break
对于是否能识别出 Mr. Slate ,如果将包含 Mr. Slate 的行作为输入,程序会将其打印出来,因为这一行中包含句点(.)。
23、编写一个程序,打印出每行中包含一个首字母大写但并非全大写的单词的行。该程序是否能匹配“Fred”,而不匹配“fred”和“FRED”?
以下是一个用Python实现的程序示例:
import re
# 假设输入文本存储在一个列表中,这里模拟从文件读取
input_lines = [ "Fred is a good name.", "fred is not capitalized.", "FRED is all capitalized." ]
# 正则表达式模式,匹配首字母大写但并非全大写的单词
pattern = r'\b[A-Z][a-z]+\b'
for line in input_lines:
if re.search(pattern, line):
print(


370

被折叠的 条评论
为什么被折叠?



