【问题标题】:C++ Command Line Argument IdentificationC++ 命令行参数识别
【发布时间】:2011-11-14 22:41:16
【问题描述】:

我需要能够判断我的命令行中的最后一个参数是否用双引号括起来。如果它在双引号中,我将其视为字符串。如果不是,我需要把它当作一个文件来打开并获取字符串。默认情况下,argv 会抓取双引号字符串并去掉引号,所以我想不出办法来处理这个问题。

伪代码是这样的......

if(argv[argc-1] was called with surrounding double quotes){
    //handle as string (I already have code to do this)
}
else{
    //handle as filename (I already have code to do this)
}

【问题讨论】:

  • 如何使用命令行参数来决定哪个是哪个? (即-s 用于字符串,-f 用于文件名)
  • 您可能需要找到一种不同的用户方式来指定它是字符串还是文件名。
  • 请注意,许多 shell 会以自己的方式解释引号,因此在某些时候您的设计可能会遇到一些意外。
  • 您使用的是 Windows,并且永远不会更改为另一个操作系统?那么您可能会有机会,因为find 工具还可以区分引号和非引号。但如果你这样做了,你就不能再把main作为你的起点。

标签: c++ command-line-arguments double-quotes command-line-interface


【解决方案1】:

argv 中的所有参数都是字符串。你最好重新考虑你的策略。尝试打开参数,如果失败则将其视为字符串。

或者,您可以在命令行中转义引号并将它们传递给您的应用程序:

$ program "\"this is a string\""

编辑:示例代码假定您使用的是 Bash shell 或类似的东西

【讨论】:

  • 不会是$ program "\"this is a string\""吗?
  • 这也可以,Bash 会去掉未转义的引号。试试吧! 编辑:你说得对,我最初是用一个单词字符串测试的
  • 谢谢大家,我必须完全按照我在家庭作业中所说的去做,不要转义任何字符。我将尝试上面提到的@Mike Steinert 策略:尝试打开文件,如果它不存在,则将其用作字符串。好主意!
  • .. except .. 如果用户碰巧想指定一个恰好是文件名的字符串怎么办?
  • @Jim Buck:这是一个很好的极端案例,但我怀疑对于这个特定的家庭作业来说这不是问题。
猜你喜欢
  • 2018-07-05
  • 2011-10-05
  • 1970-01-01
  • 2020-04-11
  • 1970-01-01
  • 2017-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多