题目描述:

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。

方法1:双指针

/*
    首先需要进行预处理,判断输入字符串是不是全部空格,如果是,直接输出字符串。
    
    否则, 
    
    遍历字符串 s ,记录单词左右索引边界 i , j ;
    
    每确定一个单词的边界,则将其倒着插入添加至单词列表 res ;
    
    最终,将单词列表拼接为字符串,并返回即可。


*/ 

class Solution {
public:
    string ReverseSentence(string str) {
        if(str.empty())
            return str;
        string res="",temp="";
        int len =str.size();
        int left=0,right=0;

        while(right<len)
        {
            while(str[right]==' ')	
            {
                left++;
                right++;
            }
            while(str[right]!=' '&&right<len)
            {
                right++;
            }
            if(left<len)
            {
                temp=str.substr(left,right-left);
                res=temp+" "+res;
                left=right;	
            }

        } 
        res.pop_back();//删除最后多出来的空格
        return res;
    }
};

方法2:使用自带库函数stringstream按空格读取 

string ReverseSentence(string str) 
{
	if(str.empty())
		return str;
		
	string res="",temp;
    stringstream ss(str);//创建存储str的副本的 stringstream 对象
    
    while(ss>>temp)按空格读取str
	{
        res=temp+" "+res;
    }
    
    //删除最后多出来的空格
    res.pop_back();
    return res;
    
        
}