使用堆栈在c ++中用句子反转单词

时间:2017-09-28 05:28:34

标签: c++ string loops stl stack

输入

"天空是蓝色的"

预期输出

"蓝色是天空"

我的输出

"蓝色是天空"

我无法在代码中指出错误。

以下是代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    string s = "the sky is blue";
    reverse(s.begin(),s.end());
    stack<char> t;
    for(int i = 0;i < s.length();i++){
        if(s[i] != ' '){
            t.push(s[i]);
        }
        else{
            while(!t.empty()){
                cout << t.top();
                t.pop();
            }
            cout << " ";
        }
    }
    return 0;
}

2 个答案:

答案 0 :(得分:1)

你推动&#34; eht&#34;进入堆栈,但你不会开始弹出它,因为字符串的长度不允许你,因为for循环停止执行。

在for循环之后弹出它,如下所示:

#include <string>
#include <stack>
#include <algorithm>
#include <iostream>
using namespace std;
int main(){
  string s = "the sky is blue";
  reverse(s.begin(),s.end());
  stack<char> t;
  for(unsigned int i = 0;i < s.length();i++){
    if(s[i] != ' '){
      t.push(s[i]);
    }
    else {
      while(!t.empty()){
        cout << t.top();
        t.pop();
      }
      cout << " ";
   }
  }
  while(!t.empty()){
    cout << t.top();
    t.pop();
  }
}

输出:

  

蓝色是天空

答案 1 :(得分:0)

C ++程序使用堆栈数据结构反转字符串中的单词。

例如“ my.name.is.vivek.mutha”将输出显示为“ mutha.vivek.is.name.my”。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s,s1;
    std::stack<std::string> st;
    int k=0;
    cin>>s;
    int l = s.length();
    vector<string> str;
    for(int i=0;i<l;i++)
    {
        if(s[i]=='.'){
            str.push_back(s1);
            str.push_back(".");
            s1="";
        }
        else
            s1.append(s,i,1);
    }
    str.push_back(s1);
    for(int i=0;i<str.size();i++)
        st.push(str[i]);
    while(!st.empty()){
        cout<<st.top();
        st.pop();
    }
}