题目描述
给定一行句子,每个词之间用空格隔开,要么是全小写英文单词,要么是全大写英文单词,要么是自然数。
要求将这些单词倒序输出。而且对于每个单词,如果是小写词,应当转为大写;如果是大写词,应当转为小写;如果是自然数,应该倒转输出。
举一个例子:
we choose TO go 2 the 123 moon
程序应当输出:
MOON 321 THE 2 GO to CHOOSE WE
输入格式
仅一行,即需要反转的句子。
输出格式
仅一行,表示程序对句子的处理结果。
输入输出样例
输入 #1复制
we choose TO go 2 the 123 moon
输出 #1复制
MOON 321 THE 2 GO to CHOOSE WE
说明/提示
样例解释
首先应当按单词逆序,即:
moon 123 the 2 go TO choose we
小写变大写、大写变小写、倒转自然数之后,得到最终结果:
MOON 321 THE 2 GO to CHOOSE WE
数据规模与约定
对于 100% 的数据,句子中包含的单词数量不超过 1000,每个单词长度不超过 6。
#include <bits/stdc++.h>
using namespace std;
string s[1000]; // 存储输入的字符串
int n = 0; // 记录输入的字符串数量
int main() {
// 读取输入,直到输入流结束
while (cin >> s[n]) {
n++;
if (n >= 1000) { // 防止数组越界
break;
}
}
// 处理每个字符串
for (int i = n - 1; i >= 0; i--) {
// 大小写转换
for (int k = 0; k < (int)s[i].size(); k++) {
if (s[i][k] >= 'a' && s[i][k] <= 'z') {
s[i][k] -= 32; // 小写转大写
} else if (s[i][k] >= 'A' && s[i][k] <= 'Z') {
s[i][k] += 32; // 大写转小写
}
}
// 如果字符串以数字开头,则反转字符串
if (s[i][0] >= '0' && s[i][0] <= '9') {
reverse(s[i].begin(), s[i].end());
}
// 输出处理后的字符串
cout << s[i];
if (i != 0) { // 最后一个字符串后不加空格
cout << " ";
}
}
return 0;
}
349

被折叠的 条评论
为什么被折叠?



