将空格隔开的单词反转顺序,不改变单词内部顺序,并反转大小写(c++)
题目链接
题目思路:
1⃣️先反转整个字符串,再反转每个单词,这样就可以做到只反转每个单词的位置顺序,不反转每个单词的内部顺序。
2⃣️使用字符ASCII码转换反转大小写
注意点:
1⃣️c++中字符串反转的reverse()方法:
reverse函数用于反转在[first,last)范围内的顺序(包括first指向的元素,不包括last指向的元素),reverse函数无返回值,头文件是#include <algorithm >
2⃣️c++中字符串的begin(),end()方法:
begin()函数返回一个迭代器,指向字符串的第一个元素。
end()函数返回一个迭代器,指向字符串的末尾(最后一个字符的下一个位置)。
3⃣️反转大小写的方法:
string res;
for(int i=0;i<n;i++){
if(s[i]!=' ' && s[i]<='Z' && s[i]>='A')
res+=s[i]-'A'+'a';
else if(s[i]!=' ' && s[i]>='a' && s[i]<='z')
res+=s[i]-'a'+'A';
else res+=s[i];
}
代码:
class Solution {
public:
string trans(string s, int n) {
// write code here
if(n==0) return s;
reverse(s.begin(),s.end());
for(int i=0;i<n;i++){
int j = i;
while(j<n && s[j]!=' ')j++;
reverse(s.begin()+i,s.begin()+j);
i = j;
}
string res;
for(int i=0;i<n;i++){
if(s[i]!=' ' && s[i]<='Z' && s[i]>='A') res+=s[i]-'A'+'a';
else if(s[i]!=' ' && s[i]>='a' && s[i]<='z') res+=s[i]-'a'+'A';
else res+=s[i];
}
return res;
}
};