我如何修改我的C 程序以显示用户输入的单词,并使用堆栈向后



我想为用户输入的每个字符分配一个指针。然后,我可能可以使用循环存储字符,并使用指针重新排列堆栈顺序。但是我不知道如何以程序形式编写它,我不确定它是否可以使用。这是我到目前为止所拥有的:

#include<iostream>
using namespace std;
class Stack{
public:
  enum {MaxStack = 50};
  void init() {top = -1;}
  void push( char n ){
    if ( isFull() ) {
      cerr << "Full Stack. DON'T PUSHn";
      return;
    }
    else {
      arr[ ++top ] = n;
      cout << "Just pushed " << n << endl;
      return;}
  }
  int pop() {
    if (isEmpty() ) {
      cerr << "tEmpty Stack. Don't Popnn";
      return 1;
    }
    else 
      return arr[top--];
  }
  bool isEmpty() {return top < 0 ? 1 : 0;}
  bool isFull() {return top >= MaxStack -1 ? top : 0;}
  void dump_stack() {
    cout << "The Stack contents, from top to bottom, from a stack dump are: " << endl;
    for (int i = top; i >= 0; i--)
      cout << "tt" << arr[i] << endl;
  }
private:  
  int top;
  int arr[MaxStack];
};
int main()
{   
    Stack a_stack;
    int x = 0;
    char inputchar;

    cout<<"Please enter a word"<<endl;
  a_stack.init();
while (inputchar != '.') //terminating char
 {
 cin >> inputchar;
 array[x] = inputchar;
 x++;
 }
int j = x;
for (int i = 0; i < j; i++)
 {
 cout << array[x];
 x--;
 }
  a_stack.push();
  a_stack.dump_stack();
return 0;
}  

堆栈,其本质(最后,首先)将逆转您投入的任何内容的顺序。字符串" Hello"的示例:

(堆栈的顶部是左侧)

H        push "H"
eH       push "e"
leH      push "l"
lleH     push "l"
olleH    push "o"

现在,当您从堆栈中弹出时,您将首先获得" O",然后是" L"等。它是您放入的,但按顺序相反。您无需做任何特别的事情就可以实现这一目标。只需按照正常顺序堆叠即可,当您弹出时,您会逆转它:

// while loop
{
    cin >> inputchar;
    a_stack.push(inputchar);
}
// Display in reverse
while (not a_stack.isEmpty()) {
    cout << (char)a_stack.pop();
}

这是一个使用std::stack的小示例程序:
(此处未进行输入错误检查。)

#include <iostream>
#include <stack>
int main()
{
    std::stack<char> st;
    char c = '';
    while (c != '.') {
        c = std::cin.get();
        st.push(c);
    }
    while (not st.empty()) {
        std::cout << st.top();
        st.pop();
    }
    std::cout << 'n';
}

示例输入和输出:

你好世界。.dlrow olleh

,除非必须使用堆栈是必须的(即它是家庭作业),否则您可能会使用getline(),它的参数 delim(cf getline),然后在数组上进行反向循环。它会更快,更干净,更不容易出现错误,基本上是两层。

最新更新