洛谷 B3640 T3 句子反转
题目描述
给定一行句子,每个词之间用空格隔开,要么是全小写英文单词,要么是全大写英文单词,要么是自然数。
要求将这些单词倒序输出。而且对于每个单词,如果是小写词,应当转为大写;如果是大写词,应当转为小写;如果是自然数,应该倒转输出。
分析
这道题可以getline按行输入,然后倒序遍历处理
按照空格判断一个单词,再根据题意进行处理。注意空格的问题
代码
#include <bits/stdc++.h>
using namespace std;
int a;
string c, s;
int main() {
getline(cin, s);
s = ' '+s;//防止检测不到最后的单词
for (int i=s.length()-1; i>=0; i--) {
if (s[i]==' ') {
c=s.substr(i);
if (c[1]>='a'&&c[1]<='z')
for (int j=1; j<c.length(); j++)
c[j]-='a'-'A';
else if (c[1]>='A'&&c[1]<='Z')
for (int j=1; j<c.length(); j++)
c[j]+='a'-'A';
else {
c=c.substr(1,c.length()-1);
c+=' ';
reverse(c.begin(), c.end());
}
if (a==0&&++a) c=c.substr(1,c.length()-1);//注意输出时第一个单词不带空格
cout << c;
s=s.substr(0,i);
}
}
return 0;
}