翻转句子中单词的顺序

时间:2022-02-25 11:43:33
题目描述:翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。 为简单起见,标点符号和普通字母一样处理。如:"I am a student."翻转成"student. a am I"。   常见面试题 */   #include<iostream> #include<vector> #include<assert.h> #include<cstring> usingnamespacestd;   voidswap(char&a, char &b) {     chartmp = b;     b = a;     a = tmp; }   voidswap_str(char* str,intstart, int end) {     assert(str!=NULL && start <= end);     intlow = start;     inthigh = end;       //整个句子按字符翻转     while(low < high)     {         swap(str[low], str[high]);         low++;         high--;     }   }   //方法一:依次读入句子中的每个单词,并将它们放入一个栈中。然后再将单词出栈。 //时间复杂度:O(n),空间复杂度:O(n);   //方法二:首先将整个句子按字符翻转,然后再将其中每个单词的字符旋转。 //时间复杂度:O(n),空间复杂度:O(1); voidreverse_word(charstr[]) {     intlen =strlen(str);       //翻转整个句子     swap_str(str, 0, len-1);       ints = 0;     inte = 0;     //翻转每个单词     for(inti=0; i<len; i++)     {         e = i;         if(str[e] ==' ')         {             //str[e]为空格,所以范围是[s,e-1].             swap_str(str, s, e-1);             s = e + 1;         }     } }   int main() {     charstr[] ="I am a student.";     reverse_word(str);     cout<<str<<endl;     return0; }