题目描述
给定一行句子,每个词之间用空格隔开,要么是全小写英文单词,要么是全大写英文单词,要么是自然数。
要求将这些单词倒序输出。而且对于每个单词,如果是小写词,应当转为大写;如果是大写词,应当转为小写;如果是自然数,应该倒转输出。
举一个例子:
we choose TO go 2 the 123 moon
程序应当输出:
MOON 321 THE 2 GO to CHOOSE WE
输入格式
仅一行,即需要反转的句子。
输出格式
仅一行,表示程序对句子的处理结果。
输入输出样例
输入
we choose TO go 2 the 123 moon
输出
MOON 321 THE 2 GO to CHOOSE WE
数据规模与约定
对于100% 的数据,句子中包含的单词数量不超过1000,每个单词长度不超过6。
下面是完整的代码
#include<stdio.h>
#include<string.h>
int main() {
char ch[6010];
int m, n, i;
gets(ch);
m = strlen(ch) - 1;
n = strlen(ch) - 1; //使m,n指向最后一个字符
while (m > 0) {
while (m > 0 && ch[m] != ' ')
m--; //此时m指向空格
if (ch[m + 1] <= 'Z' && ch[m + 1] >= 'A' || ch[m + 1] <= 'z' && ch[m + 1] >= 'a') {
if (m > 0) {
if (ch[m + 1] <= 'Z' && ch[m + 1] >= 'A')
for (i = m + 1; i <= n; i++) {
ch[i] = ch[i] - 'A' + 'a';
printf("%c", ch[i]);
}
else
for (i = m + 1; i <= n; i++) {
ch[i] = ch[i] - 'a' + 'A';
printf("%c", ch[i]);
}
}
if (m == 0) {
if (ch[m] <= 'Z' && ch[m] >= 'A')
for (i = 0; i <= n; i++) {
ch[i] = ch[i] - 'A' + 'a';
printf("%c", ch[i]);
}
else
for (i = 0; i <= n; i++) {
ch[i] = ch[i] - 'a' + 'A';
printf("%c", ch[i]);
}
}
}
else {
if (m > 0) {
for (i = n; i > m; i--)
printf("%c", ch[i]);
}
else
for (i = n; i >=m; i--)
printf("%c", ch[i]);
}
if (m > 0)
printf(" ");
m--;
n = m;
}
}