gpt4 book ai didi

c++ - 带数字偏移量的命令行参数选项

转载 作者:行者123 更新时间:2023-11-28 06:39:09 24 4
gpt4 key购买 nike

我想确保 -f 之后的选项/参数是 0-9 之间的数字。总共必须有 10 个参数,顺序不限。唯一的条件是 -f 后面必须跟一个数字。

/* Ensure that the -f option is included in the arguments
and it is preceeded by valid digit between 0 -9 */
int Crypto::offsetValidation( int argc, char *argv[] )
{
for( int i = 0; i < argc; i++ )
{
if(argv[i] == string("-f"))
{
cout << "offset" << endl;
return offset;
}
}

cout << "Usage: -f is required for offset" << endl;
exit(EXIT_FAILURE);

return 0;
}

最佳答案

将评论转录为答案

使用getopt(),然后检查它用 optarg 指向的是一位数 (strlen(optarg) == 1 && isdigit(optarg[0]))。临时参数解析会让您陷入各种临时问题。

How do I ensure that it is right after the " -f " option though…

您可以编写类似于以下的代码:

int opt;
while ((opt = getopt(argc, argv, "f:")) != -1)
{
switch (opt)
{
case 'f':
if (strlen(optarg) == 1 && isdigit(optarg[0]))
f_value = optarg[0] - '0';
else
err_exit("Invalid value '%s' for -f option", optarg);
break;
default:
…usage error and exit…;
break;
}
}

你不能保证你有 -f3 或其他什么,但你的原始字符串比较不允许这样做。使用 getopt(),可以保证如果您在命令行上有 -f3-f 3,那么 strcmp (optarg, "3") == 0。我很高兴地假设你只有 -f 参数;您需要更多代码来处理其他代码,无论它们是什么。您需要将额外的选项字母添加到当前包含 "f:" 的字符串中,并将额外的 case 添加到开关中,以及用于处理它们的变量。

我还应该补充一点,这是可以用 C++ 编译的 C 代码,而不是“真正的 C++”。有一个 Boost在 C++ 中解析选项的库可能是更好的选择——如果你被允许在你的项目中使用 Boost。通常还有许多其他选项解析器。 GNU getopt_long()也广泛用于长选项名称解析(--file name-of-file 等)。

关于c++ - 带数字偏移量的命令行参数选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26270424/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com