思路:两次翻转,先整体翻转,再局部翻转
    reverse/sort/vector的构造函数等,第二项不包括在内
    string也有begin(),end()两个迭代器

    1. string ReverseSentence(string str) {
    2. reverse(str.begin(),str.end());
    3. int p1 = 0, p2 = 0, len = str.length();
    4. while(p1 < len && p2 < len){
    5. while(p1 < len && str[p1] == ' ')p1++;
    6. p2 = p1;
    7. while(p2 < len && str[p2] != ' ')p2++;
    8. reverse(str.begin()+p1, str.begin()+p2);
    9. p1 = p2;
    10. }
    11. return str;
    12. }
    13. //第二种,自己写reverse
    14. string ReverseSentence(string str) {
    15. int len = str.length();
    16. if(len <= 1)return str;
    17. Reverse(str,0,len);
    18. int p1 = 0, p2 = 0;
    19. while(p1 < len && p2 < len){
    20. while(p1 < len && str[p1] == ' ')p1++;
    21. p2 = p1;
    22. while(p2 < len && str[p2] != ' ')p2++;
    23. Reverse(str, p1, p2);
    24. p1 = p2;
    25. }
    26. return str;
    27. }
    28. void Reverse(string &str, int start, int end){
    29. int len = end - start;
    30. for(int i = 0;i < len / 2;i++){
    31. swap(str[start + i], str[start + len - i - 1]);
    32. }
    33. }