行单词倒转
2015-07-20
次访问
题目:输入一行单词,将它们的顺序反转,标点符号也算一个单词,只考虑 “,” “.” “?”即可。例如:输入以下句子:
Where are you from?
I am from Beijng,China.
输出:
?from you are Where
.China,Beijing from am I
分析
此题是华为的一道机试题。但是当时有点问题,没有做出来。回来研究了一个半小时终于做出来了。
思路如下:
此题卡克在多行输入上了。当时想怎么处理这个多行输入的问题呢?现在想想只能输入是一个字符串数组,输出也是个字符串数组。将每一行当成字符串,然后分成 N 个单词,最后将这些单词倒序拼接成一个字符串赋给返回字符串。
代码实现
package com.huawei;
import java.util.Scanner;
public class Solution {
public static void ReverseString(String[] OrgLine, String[] ReturnLine) {
if (OrgLine == null || ReturnLine == null)
return;
String[] words = new String[20]; // 假定一行最多20个单词
ClearWords(words); // 初始化单词数组
for (int i = 0; i < OrgLine.length; i++) {
int num = 0;
ClearWords(words); // 清空单词数组
for (int k = 0; k < OrgLine[i].length(); k++) {
char ch = OrgLine[i].charAt(k);
if (ch == ' ') {
num++;
continue;
}
if (ch == '.' || ch == '?' || ch == ',') {
num++;
words[num] = ch + "";
continue;
}
words[num] += ch;
}
for (int j = num; j >= 0; j--) {
ReturnLine[i] += words[j] + " ";
}
}
}
public static void ClearWords(String[] words) {
for (int i = 0; i < words.length; i++) {
words[i] = "";
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String[] StrArr = new String[12];
String[] Line = new String[12];
for (int k = 0; k < StrArr.length; k++) {
StrArr[k] = "";
Line[k] = "";
}
int i = 0;
String inputline = null;
while (i < StrArr.Length && in.hasNextLine() && !(inputline = in.nextLine()).isEmpty()) { // 当下一行为空的时候结束输入
StrArr[i] = inputline;
i++;
}
in.close();
ReverseString(StrArr, Line);
for (int j = 0; j < i; j++)
System.out.println(Line[j]);
}
}
备注
此题思路并不复杂,但是当时困在标准输入输出上了,以前都是用C写程序,从控制台写入写出都比较熟练,但是用Java 就显得比较陌生一点。
今天的机试,让我明白了我对 Java 的字符串处理还是很陌生的,今后要在这个方面多加练习。