题目
http://acm.ecnu.edu.cn/problem/3124/
提取英文文本中的单词,重复出现的单词只取一个,把它们按照字典顺序排序,建立为一个单词表。
注意:单词与单词之间用空格或标点符号(逗号 (,),句号 (.), 惊叹号 (!), 问号 (?))分隔;提取的单词只包含 26 个英文字符。
解题思路
用C++做可能比较麻烦,直接上python的re模块。
re.split()
的第一个参数指明分隔符的模式,第二个参数为要分割的字符串。由于本题有多个分隔符,因此选取的模式使用正则表达式。[,;.!?\s]
表示匹配括号中的任意一个。更多详见使用多个界定符分割字符串。
str = list(set(str))
用于对列表str中的元素去重,虽然这样会使得元素顺序被打乱,但考虑到后面依然要排序,所以这样写没有问题。
AC代码
#coding=utf-8
import re
kase = int(input())
for t in range(kase):
str = raw_input()
str = re.split('[,;.!?\s]', str) #多分隔符
str = list(set(str)) #去重
print str
str.sort()
output = ""
print "case #%d:"%t
for (i, v) in enumerate(str):
if v == '':
continue
output += v
if i != len(str) - 1:
output += ' '
print output