题目描述
输入单行英文句子,里面包含英文字母,空格以及,.?三种标点符号,请将句子内每个单词进行倒序,并输出倒序后的语句。
输入描述:
输入字符串S,S的长度 1 ≤ N ≤ 100
输出描述:
输出倒序后的字符串
示例1 输入输出示例仅供调试,后台判断数据一般不包含示例
输入
yM eman si boB.
输出
My name is Bob.
示例2 输入输出示例仅供调试,后台判断数据一般不包含示例
输入
woh era uoy ? I ma enif.
输出
how are you ? I am fine.
备注
标点符号左右的空格 ≥ 0,单词间空格>0
题目解析
考察字符串的基础知识,难点在于对于三种符号的处理
python代码一:分类,硬编码
def revstr(s):
c = [' ', '?', '.', ',']
ns = ''
l = []
s = s.split(' ')
for i in s:
if len(i)==0:
l.append(i)
if i.isalpha() or len(i)!=0:
l.append(i[::-1])
if not i.isalpha() and len(i) > 1:
ll = []
ii = list(i)
for j in range(len(i)):
if not i[j].isalpha():
ll.append((j, i[j]))
ii.pop(j)
ii = ii[::-1]
for x in ll:
ii.insert(x[0], x[1])
l.append(''.join(ii))
ns += ' '.join(l)
return ns
s1 = 'yM eman si boB.'
s2 = 'woh era uoy ? I ma enif.'
revstr(s1)
revstr(s2)
python代码二:从左到右遍历每一个字符,如果字符是 , . ? 或者空格,择将前面的内容倒序,然后以该分隔符或空格为起点继续依次计算。
def revstr(s):
ns = ''
start = end = 0
c = [' ','?','.',',']
if len(s)==1:
print(s)
return s
for i in range(0,len(s)):
if s[i] in c:
ns += s[start:end][::-1]
ns += s[end]
start = end+1
end += 1
print(ns)
return ns
s1 = 'yM eman si boB.'
s2 = 'woh era uoy ? I ma enif.'
revstr(s1)
revstr(s2)
python代码三:从左到右遍历每一个字符,如果字符是 , . ? 或者空格,则看成一个分界符,将分界符之间的单词片段进行倒序。
import re
def revstr(s):
p = re.compile(r'[\\,\\.\\?\s]')
indx = [-1]
for i in range(len(s)):
if p.match(s[i]):
indx.append(i)
indx.append(len(s))
l = [c for c in s]
for i in range(len(indx) -1):
left = indx[i] + 1
right = indx[i+1] - 1
while left < right:
l[left],l[right] = l[right],l[left]
left += 1
right -= 1
res = ''.join(l)
print(res)
return res
s1 = 'yM eman si boB.'
s2 = 'woh era uoy ? I ma enif.'