题目大意
小Hi和小Ho为了准备英语的期末考试,找了很多英语的电子资料。但是由于U盘出了问题,导致资料内容变得很乱。于是小Hi和小Ho决定写一个程序去将所有的电子资料格式化。 已知每一份资料只包含大小写字母,‘ ’(空格), ‘,’(逗号),‘.’(句号)以及换行符。小Hi和小Ho希望整理后的资料为如下格式: - 每一句话都是以’.’结尾,每一段话都是以换行符结尾。 - 每一段开始没有空格。 - 每一个句子都是完整的,即至少包含1个单词,句末一定为‘.’(句号)。 - 每一句话只有首字母大写。 - 每句话内单词之间由1个空格隔开。 - 标点符号与前面的单词之间无空格,标点符号后有1个空格或换行符。 对于给定的资料,请你对其进行格式化,并输出格式化的结果。
解题思路
本题是一道字符串处理的题目,主要考察对于字符串的读入和输出。
首先我们需要一个字符一个字符的将所有的内容读入。在读取的过程中,我们以空格作为分隔符,将单词与标点符号提取出来。同时将所有的字母都小写化。
伪代码:
w = ""
While (text is not empty)
c = getNextChar()
If (c is letter) Then
c = lowercase(c) // 小写化
w = w + c // 累加单词
Else
If (w is not empty) Then
// 此时若w不是空,则表示前面已经读取了一个单词
// 将该单词加入文章元素的数组
article.push(w)
w = "" // 重置w
End If
If (c is not space) Then
// c为标点符号或换行符
// 同时将读取到的符号也加入文章元素的数组
article.push(c)
End If
End If
End While
最后得到的article
数组,就是构成这篇文章所有的单词,标点符号和换行符。
然后我们根据article
数组来输出格式化之后的文章:
firstWord = true
For i = 0 .. article.length
If (article[i] is not word) Then
// 如果是符号,直接输出
output article[i]
If (article[i] == '.') Then
// 如果该符号为句号,则下一个单词是新的一句话开始
firstWord = true
End If
Else
// article[i] 是单词
If (firstWord) Then
// 该单词为句首,大写化第一个字母
article[i][0] = uppercase(article[i][0])
firstWord = false
End If
// 考虑是否先输出一个空格
If (i > 0 && article[i - 1] is not '\n')
// 若当前单词不是一段开始时,我们都需要输出一个空格
output ' '
End If
output article[i]
End If
End For
至此本题得到解决。
句子的开始不是每一行的开始,而是句号的结束,句号后面下一个单词才是大写首字母