#温馨提示:此文章使用的是MD编辑器,在小程序上查看可能会出现乱码,敬请谅解
【题目链接】B3640 T3 句子反转
本题主要考察字符串的使用及处理。在题目中我们需要处理的单词有三类:
- 小写单词:转换为大写并正序输出
- 大写单词:转换为小写并正序输出
- 数字:倒序输出
我们可以使用while (cin >> s[++n])
来分单词读入,再分别处理后倒序输出即可。在处理时,可以选择从后往前地对每一个单词进行处理,即可顺便输出。
AC代码如下
#include <bits/stdc++.h>
using namespace std;
string s[1005];
int main() {
int n = 0;
while (cin >> s[++n]); // 读入一行,并按空格分割成单词,存入数组s中
n--; // 由于数组下标从0开始,所以这里要-1以便于遍历
for (int i = n; i >= 1; i--) {
for (int j = 0; j < 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 = s[i].size() - 1; j >= 0; j--)
cout << s[i][j];
} else
cout << s[i]; // 若不是数字,直接输出该单词
if (i != 1) // 当不是最后一个单词时,在其后添加空格
cout << " ";
}
return 0;
}
Tips:本次题解优化了代码风格 普通版稍后发