CCF认证201403第三题(提交未通过)

来源:互联网 发布:企业版域名注册通 编辑:程序博客网 时间:2024/05/14 03:13

已实测好几组数据通过,但是不知道为什么提交后显示错误,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;    }}
阅读全文
0 0
原创粉丝点击