已实测好几组数据通过,但是不知道为什么提交后显示错误,0分
思路:
1、将格式字符串存放于format,输入的命令行存放于字符串数组orderLine;
2、从orderLine取出一条命令行,分割选项/参数,放入ArrayList容器order,从中随后利用函数findOrder,逐个选项判断该选项是否合法(存在),是否带参数
——2.1、选项合法,不带参数-》判断是否在ArrayList容器print已有,做出相应操作
——2.2、选项合法,带参数-》同上,同时往后跳一个参数
——2.3、选项不合法(不存在),长度大于2也不合法,终止
3、输出print的内容,清空print和order,重复2
package exam201403;
import java.util.ArrayList;
import java.util.Scanner;
public class Task3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String format;
int n; //n条命令
format = sc.next();
n = sc.nextInt();
ArrayList<String> print = new ArrayList<String>();
ArrayList<String> order = new ArrayList<String>();
String[] orderLine = new String[n];
String t = sc.next();
for(int i=0; i<n; i++){
orderLine[i] = sc.nextLine();
}
for(int i=0; i<n; i++){
String[] items = orderLine[i].split(" ");
for(int j=1; j<items.length; j++){ //去掉工具项,加入数组列表
order.add(items[j]);
}
for(int j=0; j<order.size(); j++){ //逐词分析命令行
String orderItem = order.get(j);
if(orderItem.length() != 2){ //不是选项、参数,退出
break;
}
if(orderItem.charAt(0) == '-'){ //是选项
int flag = findOrder(format, order.get(j).charAt(1));
if(flag == 1){ //如果是不带参数的,且不包含
if(!print.contains(orderItem)){
print.add(orderItem);
}
}
else if(flag == 2 && j != order.size()-1){ //如果是带参数的,跳过后面的参数
j++;
if(print.contains(orderItem)){ //如果已经存在,替换参数
int index = print.indexOf(orderItem);
print.set(index+1, order.get(j));
}
else{
print.add(orderItem);
print.add(order.get(j));
}
}
else{ //非法输入,退出
break;
}
}
}
System.out.print("Case "+(i+1)+": ");
for(int j=0; j<print.size(); j++){
System.out.print(print.get(j)+" ");
}
print.clear();
order.clear();
System.out.println();
}
}
public static int findOrder(String str, char c){ //在格式字符串中查找
//不带参返回1,带参数返回2,不存在返回-1
for(int i=0; i<str.length(); i++){
if(c == str.charAt(i) && c>='a' && c<='z'){
if(i != str.length()-1 && str.charAt(i+1) == ':'){
return 2;
}
else{
return 1;
}
}
}
return -1;
}
}