C++ C++;接受带参数的命令行参数
我有一个程序需要接受多个命令行参数。我已经到了一个阶段,我需要将它设置为接受参数n,它指定最终要打印的字符串的最大和最小长度。基本上,输入可以如下所示:C++ C++;接受带参数的命令行参数,c++,command-line-arguments,C++,Command Line Arguments,我有一个程序需要接受多个命令行参数。我已经到了一个阶段,我需要将它设置为接受参数n,它指定最终要打印的字符串的最大和最小长度。基本上,输入可以如下所示: -a -n7,7 -i // with -a and -i being other arguments 我可以自己挑出论点,但我不知道如何挑出那些最大值和最小值。我已经尝试过了(见下文),但每当我尝试使用变量minimum和maximum时,我只会得到一个运行时错误。干杯,伙计们 int c; while ((c = getopt(argc,
-a -n7,7 -i // with -a and -i being other arguments
我可以自己挑出论点,但我不知道如何挑出那些最大值和最小值。我已经尝试过了(见下文),但每当我尝试使用变量minimum和maximum时,我只会得到一个运行时错误。干杯,伙计们
int c;
while ((c = getopt(argc, argv, ":wpsaevin")) != -1) {
switch (c) {
case 'w': // pattern matches whole word
mode = WHOLE;
break;
case 'p': // pattern matches prefix
mode = PREFIX;
break;
case 'a': // pattern matches anywhere
mode = ANYWHERE;
break;
case 's': // pattern matches suffix
mode = SUFFIX;
break;
case 'e': // pattern matches anywhere
mode = EMBEDDED;
break;
case 'v': // reverse sense of match
reverse_match = true;
break;
case 'i': // ignore case of pattern
ignore_case = true;
break;
case 'n': //Specifies word length
length_spec = true;
cin >> minimum >> maximum;
if (minimum == 0 && maximum == 0) { //no word limit
length_spec = false;
} else if (maximum == 0) {
maximum = 100;
}
break;
}
}
argc -= optind;
argv += optind;
:
此变量由getopt设置为指向选项的值
参数,用于接受参数的选项
以及拆分字符串的示例:
#include <iostream>
#include <string>
#include <algorithm>
int
main()
{
const char* test = "1000,2000";
std::string str = std::string(test);
auto find = std::find(str.begin(), str.end(), ',');
std::string first = std::string(str.begin(), find);
std::string second = std::string(find+1,str.end());
std::cout << first << " " << second;
// 1000 2000
}
如果没有,请尝试以下操作:
std::replace(str.begin(), str.end(), ',', ' ');
std::istringstream ss(str);
ss >> first_int;
ss >> second_int;
std::cout << first_int << " " << second_int << std::endl;
您可以使用Boost库,正如上面@aaronman所建议的。我知道不是每个人都想下载Boost,但我必须说Boost\u程序\u选项将使这10000x变得更简单、更通用、更不容易出错,如果您不介意的话,我会在控制台上发布一个答案,其中包含
cin
读取的内容,这几乎肯定不是你想要的。如果最小值
和最大值
在-n
之后出现在命令行中,那么可以从argv[任何]
获取它们。哈哈,每当我有问题时,人们总是告诉我有更简单的方法。不幸的是,我的大部分工作都是为了那些有我们必须如何进行的规范的任务。谢谢。但我想我不知道如何正确地把这些例子放在一起。我尝试使用optarg读取字符串,使用分隔符将其拆分,然后使用“atoi”将这两部分转换为int。我得到的错误是find没有命名类型,atoi不能转换,等等。谢谢。我要试一试。
int first_int = std::stoi( first );
int second_int = std::stoi ( second );
std::replace(str.begin(), str.end(), ',', ' ');
std::istringstream ss(str);
ss >> first_int;
ss >> second_int;
std::cout << first_int << " " << second_int << std::endl;
int convert(std::string s)
{
int size = s.size();
int exp = size - 1;
int result = 0;
for (int i = 0; i < size; i++)
{
char c = s[i];
result += (int)(c - '0') * std::pow(10, exp--);
}
return result;
}