如果我想验证用户是否已为程序输入特定参数,我该怎么办?这是我目前的代码:
#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
答案 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(),[¶](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还有一个实用工具。我相信还有其他几十个人。不要重新发明轮子。