Skip to content

Latest commit

 

History

History
33 lines (24 loc) · 2.2 KB

File metadata and controls

33 lines (24 loc) · 2.2 KB

参数

问题描述

很多人都要不断重复分析命令行参数。如果我们没有方便的工具,只要遍历一下传入到main函数中的字符串数组就可以了。虽然也有许多不错的工具,但都无法很好满足我们的需要。所以请你写一个!

传入到程序中的参数包括标记(flag)和值(value)。标记应当是一个字母,前面是个-号。每个标记都会附带0或1个值。

你应当为这些参数写一个解析器。这个解析器利用一种规范(schema)来详细描述程序期望使用哪些参数。这个规范规定了程序期望的标记与值的数量和类型。

一旦确定了这个规范,程序就应当将实际的参数列表传给参数解析器。解析器会检查参数是否符合规范。之后程序会用表记得名字从参数解析器获得各个值。这些值会按照规范的要求以正确的类型返回。

例如,如果要用这些参数调用程序:

-l -p 8080 -d /usr/logs

这确定了一个具有3个标记的规范:l、p、d。标记"l"(logging)没有附加值,这是个布尔型标记。如果存在,则为true,不存在则为false。标记"p"(port)有一个整数值,标记"d"(directory)有一个字符串值。 若没有传规范中所提到的参数,就得到合适的默认值。例如:布尔值默认为false,数字默认为0,字符串默认为""。如果参数和规范不符,就要给出错误信息,解释究竟哪里出错了。

如果你更有野心,可以扩展你的代码来支持列表,比如:

-g this,is,a,list -d 1,2,-3,5

也就是说,标记"g"是一个字符串的列表[“this”, “is”, “a”, “list”],而标记"d"是一个整数的列表[1, 2, -3, 5]

确保你的代码可扩展,可以简单明了地添加新的值类型。

要点

规范看起来什么样子以及应该如何编写故意没有明确。重点在于设计一种简洁、可读的格式。

建议的测试案例

  • 确保你有一个带有负整数的测试(与-号混淆)
  • 参数的顺序无需与规范中给出的顺序一致
  • 做一些测试验证如果规范中给出的参数缺省,能够给出正确的默认值