题目:
给定一个字符串,逐个翻转字符串中的每个单词。
示例 1:
输入: "the sky is blue"
输出: "blue is sky the"
示例 2:
输入: " hello world! "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:
输入: "a good example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
思路:
1.将字符串多余的空格除去(本题难点);
2.将去除空格和后的字符串翻转;
3.将单词挨个翻转,以空格为翻转标志。
#include#include using namespace std; //理解代码需要注意空格的个数,删除完空格后,中间的还剩一个,前后没有 void reverse(string &s,int start,int end) { for (int i=start,j=end;i 0&&s[fast]==' '&&fast 0&&s[fast]==' '&&s[fast-1]==' ') { continue; } else { s[slow++]=s[fast];//s[slow]=s[fast];slow++; } } if(slow-1>0&&s[slow-1]==' ') { s.resize(slow-1); } else { s.resize(slow); } } int main() { string s; cout<<"string: "< 对于reverse函数,c++库中也有,但是其复杂度比较高,所以这里重写。
结果如下:



