C++ 在C++;处理论据

C++ 在C++;处理论据,c++,getopt,C++,Getopt,程序是这样工作的,参数在开始时以如下形式提供: -w猫 字符串“cat”存储在变量模式中,对于后跟-的每个字母,我们会做一些事情;在本例中,我们设置mode=W。我遇到的问题是,参数的形式为: -w-s-n3,4类 现在我相信,与以前一样,模式按照读取顺序设置为W、S和N。如果我想存储/记住循环完成后设置的字母顺序mode,我可以将信息存储在数组中。同样,正如应该做的那样,模式被分配了字符串“cat”。如果我错了,请纠正我,或者有没有更简单的方法 其次,我希望能够访问和存储数字3和4。我不确定这

程序是这样工作的,参数在开始时以如下形式提供:

-w猫

字符串“cat”存储在变量模式中,对于后跟-的每个字母,我们会做一些事情;在本例中,我们设置mode=W。我遇到的问题是,参数的形式为:

-w-s-n3,4类

现在我相信,与以前一样,模式按照读取顺序设置为W、S和N。如果我想存储/记住循环完成后设置的字母顺序mode,我可以将信息存储在数组中。同样,正如应该做的那样,模式被分配了字符串“cat”。如果我错了,请纠正我,或者有没有更简单的方法

其次,我希望能够访问和存储数字3和4。我不确定这是如何做到的,我也不确定argc-=optind;及 argv+=optind;做除了我认为参数存储在字符串数组中

enum MODE {
    W,S,N
} mode = W;
int c;
while ((c = getopt(argc, argv, ":wsn")) != -1) {
    switch (c) {
        case 'w': 
            mode = W;
            break;
        case 's': 
            mode = S;
            break;
        case 'n':
            mode = N;
            break;   
    }
}
argc -= optind; 
argv += optind; 

string pattern = argv[0];

更新:弄明白了如何访问这些数字,我只需要在循环过程中查看argv中的内容。因此,我想我会将在那里找到的值存储在另一个变量中以供使用。

getopt
在提供了具有值的参数时设置全局变量
optarg
。例如:

for(;;)
{
  switch(getopt(argc, argv, "ab:h")) // note the colon (:) to indicate that 'b' has a parameter and is not a switch
  {
    case 'a':
      printf("switch 'a' specified\n");
      continue;

    case 'b':
      printf("parameter 'b' specified with the value %s\n", optarg);
      continue;

    case '?':
    case 'h':
    default :
      printf("Help/Usage Example\n");
      break;

    case -1:
      break;
  }

  break;
}
有关更完整的示例,请参见

我希望能够访问和存储数字3和4


由于这是一个逗号分隔的列表,您需要解析标记的
optarg
(请参见
strtok
),然后使用
atoi
或类似方法将每个标记转换为整数。

我可以推荐
getopt_long
或者更好的方法,。还可以看看这个名为..的库。。看起来很酷!谢谢,但我必须使用getopt:(