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 << " ";
    }
}