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

题解思路:
推荐使用完整代码:
#include<iostream>
#include <cstring>
#include <stdlib.h>
#include<algorithm>
using namespace std;
string reverseWords(string s)
{
int k=0;
int n=s.size();
for(int i=0;i<n;i++)
{
while(i<n&&s[i]==' ')
{
i++;
}
if(i==n)
{
break;
}
int j=i;
while(j<n&&s[j]!=' ')
{
++j;
}
reverse(s.begin()+i,s.begin()+j);
if(k)
{
s[k++]=' ';
}
while(i<j)
{
s[k++]=s[i++];
}
}
s.erase(s.begin()+k,s.end());
reverse(s.begin(),s.end());
return s;
}
int main()
{
string s="i am a student";
string ans=reverseWords(s);
cout<<ans<<endl;
return 0;
}
方法一:栈和istringstream结合
函数代码:
class Solution {
public:
string reverseWords(string s) {
stack<string> stk;
string res,str;
istringstream ss(s);
while (ss >> str) stk.push(str), stk.push(" ");
if (!stk.empty()) stk.pop();
while (!stk.empty()) res += stk.top(), stk.pop();
return res;
}
};
方法二:
函数代码:
class Solution {
public:
string reverseWords(string s) {
string t,res;
int i=0,n=s.size();
while(i<n)
{
//空格跳过,指向下一个单词第一个
while(i<n&&s[i]==' ')
{
i++;
}
if(i==n)
{
break;
}
t="";
while(i<n&&s[i]!=' ')
{
t=t+s[i];
++i;
}
res=t+" "+res;
}
if(!res.empty())
{
res.pop_back();
}
return res;
函数代码三;
class Solution {
public:
string reverseWords(string s) {
//stringstream
//ss 输出单词
//res 存储结果
stringstream ss(s);
string res,cur;
while(ss>>cur){
res = cur+' '+res;
}
return res.substr(0,res.size()-1);
}
};
本文介绍了一种算法,用于翻转英文句子中单词的顺序,同时保持每个单词内部字符顺序不变。提供了三种实现方法,包括使用字符串操作、栈和istringstream结合以及stringstream结合的方法。
268

被折叠的 条评论
为什么被折叠?



