java 面试题:不用库函数实现字符串逆序
2009-09-27 22:20
519 查看
题目:
不用库函数实现字符串逆序
解答:
由于数组的大小空间是固定的所以无法应对各种输入情况,并且最后显示的字符串的单词之间间隔变大,如果同志们有更好的办法请不吝指教。
-更正一下:
方法二中使用了栈因此可以完全不使用String.length,通过判空来达到同样的效果,特此更正一下。
方法一:
Code
1 import java.io.BufferedInputStream;
2 import java.io.BufferedReader;
3 import java.io.IOException;
4 import java.io.InputStreamReader;
5
6
7
8 public class ReverseApp{
9 public static void main(String args[]) {
10 //使用数组的弊端是只能创建固定大小空间的数组,不灵活
11 String[] str = new String[20];
12 char[] charstr = new char[10];
13 int i = 0,j = 0,k = 0;
14 //最后得到的目标字符串
15 String dest = "";
16 BufferedInputStream in=new BufferedInputStream(System.in);
17 System.out.println("请输入字符串:");
18 try
19 {
20 //char(10)表示换行 char(13)表示回车 必须两个一起判断
21 while((i = in.read()) != 10 && i != 13)
22 {
23 if((char)i != ' ')
24 {
25 charstr[j] = (char)i;
26 j++;
27 }
28 else
29 {
30 str[k] = new String(charstr);
31 k++;
32 charstr = new char[10];
33 j = 0;
34 }
35 }
36
37 } catch (Exception e) {
38 e.printStackTrace();
39 }
40 //回车后最后一单词未能放入字符串数组
41 if(j != 0)
42 {
43
44 str[k] = new String(charstr);
45 }
46
47 //方法二:创建栈的实例用来逆序字符串
48 Stackx stringStack = new Stackx(str.length);
49 j = 0;
50 while(str[j] != null)
51 {
52 stringStack.push(str[j]);
53 j++;
54 }
55
56 /*for(j = 0;j < str.length;j++)
57 {
58 //由于str.length表示的是数组的初始化长度,所以要把null都去掉
59 if(str[j] != null)
60 {
61 stringStack.push(str[j]);
62 }
63 }*/
64
65 while(!stringStack.isEmpty())
66 {
67 dest = dest + stringStack.pop();
68 }
69 System.out.println("逆序后的字符串:");
70 System.out.println(dest);
71 }
72
73 }
74
75 //栈
76 class Stackx{
77 //三个必须元素
78 private int maxSize;
79 private String[] stackArray;
80 private int top;
81
82 //构造栈
83 public Stackx(int s){
84 maxSize=s;
85 stackArray=new String[maxSize];
86 top=-1;//栈为空
87 }
88
89 //栈所具有的动作
90 public void push(String j){
91 stackArray[++top]=j;//创建顶层空间并插入值
92 }
93 public String pop(){
94 return stackArray[top--];
95 }
96 public String peek(){
97 return stackArray[top];
98 }
99 public boolean isEmpty(){
100 return (top==-1);
101 }
102 public boolean isFull(){
103 return (top==maxSize-1);
104 }
105
106 }
107
不用库函数实现字符串逆序
解答:
由于数组的大小空间是固定的所以无法应对各种输入情况,并且最后显示的字符串的单词之间间隔变大,如果同志们有更好的办法请不吝指教。
-更正一下:
方法二中使用了栈因此可以完全不使用String.length,通过判空来达到同样的效果,特此更正一下。
方法一:
Code
1 import java.io.BufferedInputStream;
2 import java.io.BufferedReader;
3 import java.io.IOException;
4 import java.io.InputStreamReader;
5
6
7
8 public class ReverseApp{
9 public static void main(String args[]) {
10 //使用数组的弊端是只能创建固定大小空间的数组,不灵活
11 String[] str = new String[20];
12 char[] charstr = new char[10];
13 int i = 0,j = 0,k = 0;
14 //最后得到的目标字符串
15 String dest = "";
16 BufferedInputStream in=new BufferedInputStream(System.in);
17 System.out.println("请输入字符串:");
18 try
19 {
20 //char(10)表示换行 char(13)表示回车 必须两个一起判断
21 while((i = in.read()) != 10 && i != 13)
22 {
23 if((char)i != ' ')
24 {
25 charstr[j] = (char)i;
26 j++;
27 }
28 else
29 {
30 str[k] = new String(charstr);
31 k++;
32 charstr = new char[10];
33 j = 0;
34 }
35 }
36
37 } catch (Exception e) {
38 e.printStackTrace();
39 }
40 //回车后最后一单词未能放入字符串数组
41 if(j != 0)
42 {
43
44 str[k] = new String(charstr);
45 }
46
47 //方法二:创建栈的实例用来逆序字符串
48 Stackx stringStack = new Stackx(str.length);
49 j = 0;
50 while(str[j] != null)
51 {
52 stringStack.push(str[j]);
53 j++;
54 }
55
56 /*for(j = 0;j < str.length;j++)
57 {
58 //由于str.length表示的是数组的初始化长度,所以要把null都去掉
59 if(str[j] != null)
60 {
61 stringStack.push(str[j]);
62 }
63 }*/
64
65 while(!stringStack.isEmpty())
66 {
67 dest = dest + stringStack.pop();
68 }
69 System.out.println("逆序后的字符串:");
70 System.out.println(dest);
71 }
72
73 }
74
75 //栈
76 class Stackx{
77 //三个必须元素
78 private int maxSize;
79 private String[] stackArray;
80 private int top;
81
82 //构造栈
83 public Stackx(int s){
84 maxSize=s;
85 stackArray=new String[maxSize];
86 top=-1;//栈为空
87 }
88
89 //栈所具有的动作
90 public void push(String j){
91 stackArray[++top]=j;//创建顶层空间并插入值
92 }
93 public String pop(){
94 return stackArray[top--];
95 }
96 public String peek(){
97 return stackArray[top];
98 }
99 public boolean isEmpty(){
100 return (top==-1);
101 }
102 public boolean isFull(){
103 return (top==maxSize-1);
104 }
105
106 }
107
相关文章推荐
- 不用库函数,用c语言实现将一整型数字转化为字符串
- 剑指offer--面试题28:字符串的排列--Java实现
- 实现C语言的拷贝函数且将复制后的字符串逆序,不能使用库函数,不能定义其他的变量。
- 剑指Offer 面试题20:表示数值的字符串 Java代码实现
- 不用库函数实现求字符串的长度
- 剑指offer面试题49 把字符串转换成整数 (java实现)
- 数据结构与算法分析笔记与总结(java实现)--字符串7:句子的逆序练习题
- 实现C语言的拷贝函数且将复制后的字符串逆序,不能使用库函数,不能定义其他的变量。
- 【java】整数逆序,递归实现和字符串切割实现。
- 经典面试题--不调用库函数实现字符串的拷贝
- 不用任何库函数实现以单词为单位的字符串逆转算法(C#)
- java面试题的字符串逆序输出
- 将一个字符串逆序(用递归实现不能使用库函数)
- 笔试面试题12--字符串拷贝、链接、比较无库函数实现
- 剑指offer面试题28:字符串的排列 Java实现
- 不用库函数,用C语言实现将一整型数字转化为字符串
- 整型数组处理算法(十四)不用库函数,用C语言实现将一整型数转换成字符串
- 【Java】实现浮点数组的并集以及整型数组的交集和两个字符串数组的逆序排序
- 常见的面试题如何不用库函数实现strcpy函数
- 不调用库函数,实现字符串复制函数char * strcpy(char * dst, const char * src) C/C++软件开发求职面试题 必备考点(二)