#include<iostream>
#include<string>
using namespace std;
class Solution {
public:
string trans(string s, int n) {
if (n == 0)
return s;
string res;
for (int i = 0; i < n; i++) {
//大小写转换
if (s[i] <= 'Z' && s[i] >= 'A')
res += s[i] - 'A' + 'a';
else if (s[i] >= 'a' && s[i] <= 'z')
res += s[i] - 'a' + 'A';
else
//空格直接复制
res += s[i];
}
//"This is a sample"变成"tHIS IS A SAMPLE"
reverse(res.begin(), res.end());
//反转区间:[res.begin,res.end)
//res.begin()指向t,res.end()指向E后面
//"tHIS IS A SAMPLE"变成"ELPMAS A SI SIHt"
for (int i = 0; i < n; i++) {
int j = i;
//以空格为界,二次翻转
while (j < n && res[j] != ' ')
j++;
//res[6]=' ' res[8]=' ' res[11]=' '
reverse(res.begin() + i, res.begin() + j);
//反转区间[res.begin,res.begin()+6),即ELPMAS反转
i = j;
}
return res;
}
};
int main() {
Solution sl;
string str="This is a sample";
int n = str.size();
cout << "反转后:" << sl.trans(str, n);
}