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

已实测好几组数据通过,但是不知道为什么提交后显示错误,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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值