首页 > 试题广场 >

参数与艺术

[编程题]参数与艺术
  • 热度指数:311 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
为了确保智加科技的智能驾驶重卡能够满足各类运输要求,工程师阿文跟着测试车队开始了在中国国道上的驰骋,他敏锐的发现其车辆的参数配置文件采用带有相对路径的树状层次结构进行组织,如以下结构所示(缩进为两个空格字符):
/P1:v1
  Q1:v2
    R1:v3
    R2:v4
/P2:v5
那么,随着测试以及量产车辆的增多需要使用集中式的参数服务器来管理配置,这也意味着将原有的配置文件导入到参数服务器在参数服务器中,参数采用Key-Value的形式进行组织。需将上述格式的配置文件转化成如下形式:
/P1:v1
/P1/Q1:v2
/P1/Q1/R1:v3
/P1/Q1/R2:v4
/P2:v5
请用程序实现以上过程输入为原始带有相对路径的配置文件,输出为平铺展开的配置文件。


输入描述:
输入为层次结构配置文件读入到内存的字符串。


输出描述:
输出为平铺完的字符串。
示例1

输入

/P1:v1
  Q1:v2
    R1:v3
    R2:v4
/P2:v5
#

输出

/P1:v1
/P1/Q1:v2
/P1/Q1/R1:v3
/P1/Q1/R2:v4
/P2:v5
#
示例2

输入

/P1:
  Q1:v2
#

输出

/P1/Q1:v2
#
示例3

输入

/P1:
#

输出

#

备注:
1. 输入的所有字符均为英文字符。
2. 每一行字符串中间和结尾均没有多余的空格字符。
3. 输入和输出数据没有空白行。
4. Key-Value模式的结果中没有空字符串的value。
5. 为了方便在线judge,在输入输出的字符的结尾都增加一个“#”字符。
import java.util.*;

public class Main{
    public static void main(String[] args){
        ArrayList<String> prefix=new ArrayList<String>();
        int stackPeek=0;
        Scanner in=new Scanner(System.in);
        int exblank=0;
        while(true){
            String thisLine=in.nextLine();
            if(thisLine.equals("#"))    break;
            for(exblank=0;thisLine.charAt(exblank)==' ';exblank++);
            while(exblank<stackPeek*2){
                stackPeek--;
                prefix.remove(stackPeek);//栈弹出;直到深度小于当前一级;
            }
            String temp=thisLine.substring(exblank,thisLine.length());
            String temps[]=temp.split(":");//前缀压入栈;
            if(stackPeek==0)
            	prefix.add(temps[0]);
            else
            	prefix.add('/'+temps[0]);
            stackPeek++;
            if(temps.length==1) {//如:后没有文件,则跳过输出部分;
            	continue;
            }
            for(String it:prefix){//输出前缀;
                System.out.print(it);
            }
            System.out.printf(":%s\n",temps[1]);
        }
        System.out.printf("#");
        return;
    }
}

发表于 2022-04-14 19:07:47 回复(0)

热门推荐

通过挑战的用户