如何检查主参数是否存在并在C ++中验证它

时间:2016-05-01 18:07:20

标签: c++

如果我想验证用户是否已为程序输入特定参数,我该怎么办?这是我目前的代码:

#include <iostream>
#include <cstdlib>

int main (int argc, char* argv[]) {

    if (argv[1] == "--para") {
        std::cout << "Some text here..." << std::endl;
    }

}

上面的代码不起作用,因为我需要一些方法将参数转换为字符串,所以我可以在if语句中验证它。

我不知道如何在程序中使用多个参数时检查--para是否存在。

示例:

./main parameter1 parameter2 --para

4 个答案:

答案 0 :(得分:3)

您可以直接构建和使用std::vector std::strings

#include <iostream>
#include <string>
#include <vector>

int main(int argc,char* argv[])
{
    std::vector<std::string> params{argv, argv+argc};

    for (auto i : params)
        if (i == "--para") {
            std::cout << "Some text here..." << std::endl;
        }

    return 0;
}

如果您想知道其中至少有一个参数是否匹配,您可以使用标准库算法来检查:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

int main(int argc,char* argv[])
{
    std::vector<std::string> params{argv, argv+argc};
    const std::string para{"--para"};

    if (std::any_of(params.begin(),params.end(),[&para](std::string val) {return val==para; }))
            std::cout << "Some text here..." << std::endl;

    return 0;
}

答案 1 :(得分:1)

您需要循环检查:

for( int i = 1; i < argc; i++ ) {
    if (strcmp(argv[i], "--para") == 0) {
        std::cout << "Some text here..." << std::endl;
    }
}

您可以将字符指针转换为字符串,而不是使用strcmp

for( int i = 1; i < argc; i++ ) {
    std::string str(argv[i]); 
    if (str ==  "--para") {
        std::cout << "Some text here..." << std::endl;
    }
}

答案 2 :(得分:0)

你可以使用strcmp在纯c中完成。例如,检查第一个参数:

if(argc > 1 && strcmp(argv[1], "--para") == 0) {
// do some stuff here
}

您可以循环遍历其他参数并应用相同的逻辑来检查其他参数

答案 3 :(得分:0)

这是一个已解决的问题。那里有很多图书馆。我喜欢argp,但它是特定的gnu(我认为)。它也是C,而不是C ++,但可以使其工作。 Boost还有一个实用工具。我相信还有其他几十个人。不要重新发明轮子。

http://optionparser.sourceforge.net/

http://tclap.sourceforge.net/

boost

What parameter parser libraries are there for C++?