基于数组的栈实现--控制台输入字符串逆序输出。

要求:提示输入一个字符串,回车后屏幕显示字符串顺序倒置后的结果。
思想:用栈进行字符串逆序。首先字母从输入的字符串中开一个一个的提取出来,并压入栈中,接着它们依次弹出栈,并显示出来,因为栈后进先出的特性,字符串的顺序就颠倒过来了。

StackX类

public class StackX {
    private int max_size;           //栈最大容量
    private char[] stackArray;
    private int top;                //栈顶下标
    public StackX(int m){           //构造方法
        max_size=m;
        stackArray=new char[max_size];
        top=-1;
    }
    public void push(char p1){     //进栈
        stackArray[++top]=p1;
    }
    public char pop(){
        return stackArray[top--]; //出栈
    }
    public char peek(){          //查看栈顶元素
        return stackArray[top];
    }
    public boolean isEmpty(){   //判断栈是否为空
        return (top==-1);
    }
    public boolean isFull(){   //判断是否已满
        return (top==max_size-1);
    }
}

Reverser类

public class Reverser {
    private String input;
    private String output;
    public Reverser(String s){
        input=s;
    }
    public String doRec(){                      //字符串倒序方法
        int max_size=input.length();
        StackX s=new StackX(max_size);          //创建大小为输入字符串长度的栈
        for (int i=0;i<input.length();i++){
            char c1=input.charAt(i);
            s.push(c1);                         //循环入栈
        }
        output="";
        while(!s.isEmpty()){
            char c2=s.pop();                    //出栈
            output=output+c2;                   //字符串拼接,可直接用"+"
        }
        return output;
    }
}

测试类RecerserApp

public class RecerserApp {
    public static void main(String args[]){
        String input,output;
            while (true) {
               System.out.println("请输入一个字符串:");
               System.out.flush();
               //flush();是流式输入输出常用的一个方法,表示强制请求清空缓冲区,让i/o系统立马完成它应该完成的输入、输出动作。
               input=getString();               //接收从控制台输入的字符串
               if(input.equals("")){
                    break;
               }
               Reverser theReverser=new Reverser(input);
               output=theReverser.doRec();
               System.out.println("转换后"+output);
            }
        }
        /*
                System.in 接受从控制台输入的字节。
                new InputStreamReader(System.in);构造一个InputStreamReader对象,
                这个对象是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。
                BufferedReader br=new BufferedReader(isr)的作用是:
                构造一个字符流的缓存,里面存放在控制台输入的字节转换后成的字符。
                s=buf.readLine();从这个缓存中读取一行的内容。

                通俗来说:nputStreamReader 就是一个可以从 System.in 里面读取东西的管道
                然后BufferedReader 就是比InputStreamReader 更高级的 更粗点的管道
                可以嵌套在InputStreamReader的外面 从而实现缓冲功能 并且可以用外层管道的readLine()方法读取一行数据
                依次类推 一种低级字节流管道的管道 我们可以在其外面嵌套一个更高级的数据流管道 从而更加方便的读写数据
         */
        public static  String getString(){
            InputStreamReader isr=new InputStreamReader(System.in);
            BufferedReader br=new BufferedReader(isr);
            String s= null;
            try {
                s = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return s;
        }
}

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/nuoyan2018/article/details/84954356