B3640 句子反转
输入
可以使用 getline 读入一整行后慢慢处理,也可以用 cin 分单词读入。
while(cin >> s[++n])
下面的讲解基于 cin 分单词读入。
单词的处理
单词可以分为以下几种:
-
小写单词
-
大写单词
-
数字
我们对三种字符串分别处理,如果是小写单词,则变为大写并正序输出;如果是大写单词,则变为小写并正序输出;如果是数字,则倒序输出。
#include<bits/stdc++.h>
using namespace std;
int n;
string s[1007];
int main() {
while(cin >> s[++n]); --n;
for(int i = n; i >= 1; i--) {
for(int j = 0; j < (int)s[i].size(); j++) {
if(s[i][j] >= 'a' && s[i][j] <= 'z') s[i][j] -= 'a' - 'A';
else if(s[i][j] >= 'A' && s[i][j] <= 'Z') s[i][j] -= 'A' - 'a';
}
if(s[i][0] >= '0' && s[i][0] <= '9')
for(int j = (int)s[i].size() - 1; j >= 0; j--) cout << s[i][j];
else cout << s[i];
if(i != 1) cout << " ";
}
}