一、问题描述
二、解题思路
很明显,用到栈来保存单词,用双指针解决。
首先去掉字符串的前导空格
从头到尾扫描字符串,以空格来区分不同的单词
每次找到一个单词后,将一个空格压入栈内
扫描得到一个单词后,将快指针作为新的起点,令慢指针指向和快指针相等的位置,即令慢指针作为新的起点,重复操作上述过程,直到结束
三、解题代码
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main()
{
string str;
while (getline(cin, str))
{
long rear = 0, prior = 0;
long len = str.length();
stack<string> s;
while (rear < len && str[rear] != '\0')
{
while (rear < len && str[rear] == ' ')
{
rear++;
}
prior = rear;
while (prior < len && str[prior] != ' ')
{
prior++;
}
if (rear == len)
break;
string tmp_str = str.substr(rear, prior - rear);
s.push(tmp_str);
s.push(" ");
rear = prior;
}
s.pop();
while (!s.empty())
{
cout << s.top();
s.pop();
}
cout << endl;
}
return 0;
}
还有更强的,利用cin
输入字符串时遇到空格就返回的方法
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main()
{
string str;
stack<string> s;
while (cin >> str)
{
s.push(str);
s.push(" ");
}
s.pop();
while(!s.empty()){
cout << s.top();
s.pop();
}
return 0;
}