题目描述
输入单行英文句子,里面包含英文字母,空格以及,.?三种标点符号,请将句子内每个单词进行倒序,并输出倒序后的语句。
输入描述
输入字符串S,S的长度 1 ≤ N ≤ 100
输出描述
输出倒序后的字符串
备注
标点符号左右的空格 ≥ 0,单词间空格>0
用例
输入 | yM eman si boB. |
输出 | My name is Bob. |
说明 | 无 |
输入 | woh era uoy ? I ma enif. |
输出 | how are you ? I am fine. |
说明 | 无 |
问题解析
给定一个单行英文句子,要求将句子中的每个单词进行倒序,然后输出倒序后的句子。标点符号保持不变,单词与标点符号之间的空格大于0。
输入描述
输入一个字符串 S,长度为 1 ≤ S ≤ 100。
输出描述
输出倒序后的字符串。
示例
- 输入:
yM eman si boB.
- 输出:
My name is Bob.
思路分析
- 使用
isalpha
函数判断字符是否为字母。 - 遍历字符串,将每个单词进行反转,遇到非字母字符时直接添加到结果中。
- 使用一个临时变量存储当前单词,遇到非字母字符时将临时变量反转并添加到结果中,然后清空临时变量。
实现步骤
- 定义一个字符串来存储当前单词。
- 遍历输入字符串,逐个字符处理。
- 如果字符是字母,则将其添加到当前单词中。
- 如果字符不是字母,则将当前单词反转并添加到结果中,然后添加该非字母字符,并清空当前单词。
- 最后处理剩余的单词(如果有),将其反转后添加到结果中。
C++ 实现
以下是实现该逻辑的 C++ 代码:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string reverseWords(const string& s) {
string result;
string word;
for (char c : s) {
if (isalpha(c)) {
word += c;
} else {
reverse(word.begin(), word.end());
result += word;
result += c;
word.clear();
}
}
// 处理最后一个单词
if (!word.empty()) {
reverse(word.begin(), word.end());
result += word;
}
return result;
}
int main() {
string s;
getline(cin, s);
cout << reverseWords(s) << endl;
return 0;
}
代码说明
- reverseWords 函数:
- 遍历字符串,将每个单词反转。
- 遇到非字母字符时,将当前单词反转并添加到结果中。
- 将非字母字符直接添加到结果中,并清空当前单词。
- 最后处理剩余的单词(如果有),将其反转后添加到结果中。
- 主函数:
- 读取输入字符串。
- 调用
reverseWords
函数并输出结果。
使用示例
- 输入:
yM eman si boB.
- 输出:
My name is Bob.
该程序能够根据输入的英文句子正确地反转每个单词,并输出处理后的句子。
Python 实现
def reverse_words(s):
result = []
word = []
for c in s:
if c.isalpha():
word.append(c)
else:
if word:
result.append(''.join(reversed(word)))
word = []
result.append(c)
# 处理最后一个单词
if word:
result.append(''.join(reversed(word)))
return ''.join(result)
def main():
s = input().strip()
print(reverse_words(s))
if __name__ == "__main__":
main()
代码说明
- reverse_words 函数:
- 遍历字符串,将每个单词反转。
- 遇到非字母字符时,将当前单词反转并添加到结果列表中。
- 将非字母字符直接添加到结果列表中,并清空当前单词。
- 最后处理剩余的单词(如果有),将其反转后添加到结果列表中。
- 主函数:
- 读取输入字符串。
- 调用
reverse_words
函数并输出结果。
使用示例
- 输入:
yM eman si boB.
- 输出:
My name is Bob.
该程序能够根据输入的英文句子正确地反转每个单词,并输出处理后的句子。