UVA892 寻找单词
题目描述
在处理输入文本时,一个常见问题是把文本中的单词分离出来。但由于标点符号的存在,这件事会变得更困难:单词旁边可能带着逗号、引号(例如 `"quote marks"`)、括号,或者单词中间包含连字符(hyphen)。当程序需要把单词拿去字典中查找时,这些标点并不算作字母。
在本题中,你需要从文本中提取出“干净(clean)”的单词,也就是**不附带或夹杂任何非字母字符**的单词。
本题中,“单词(word)”定义为:**由非空白字符组成的连续字符串**,并且其两侧是空白字符。这里“空白(whitespace)”指:空格字符、换行符,以及文件的开始/结束(例如输入文件为 `Anne Bob`,A 与 B 之间只有一个空格且没有其他字符,那么有两个单词:`Anne` 与 `Bob`)。
输入格式
输入由若干行组成,每行长度不超过 60 个字符。每一行都以一个**非空白字符**结尾(随后紧跟换行符)。输入以仅包含一个字符 `#` 的行结束。
输出格式
输出应为输入文本的各行内容,但需要对每个单词进行处理:**把其中所有非字母字符剔除**。
这里“非字母(non-letter)”指:**既不是字母(`a`-`z` 与 `A`-`Z`),也不是空白字符**的任意字符。
你的程序必须**不改变字母与空格字符**(行末多余空格会被评测忽略)。当一个非字母字符出现在单词中间(即它两侧都不是空白字符)时,应直接删除它(参考样例中 `doesn’t` 的处理方式)。如果某个“单词”完全由非字母字符构成,那么它将被完全删除(因为删除后为空)。
另外,对于**位于行末的连字符** `-` 有一条特殊规则:
- 连字符前的“单词部分”和下一行的第一个“单词部分”应当合并为一个单词;
- 这个合并后的完整单词必须**单独输出在一行**;
- 你可以假设:第一行的该单词部分前一定有一个空格,第二行的该单词部分后一定有一个空格。
说明/提示
由 GPT5.2 翻译