gpt4 book ai didi

c++ - 我们可以从单个std::stringstream转换多个命令行参数吗

转载 作者:行者123 更新时间:2023-12-02 09:53:25 26 4
gpt4 key购买 nike

我有一个程序,可以从命令行输入多个字符串和数字变量。因为我想将很少的输入转换为数字类型,所以我一直按照learncpp的建议使用std::stringstream。目前,我的代码如下所示:

main.cpp

int main(int argc, char* argv[]) {
if (argc != 7)
{
std::cout << "Execute the program in the following format:\n";
std::cout << ".\segment inputImage outputDir color k sigma minSize\n";
std::cout << "Exiting program\n";
std::exit(1);
}

float gaussianBlur, kValue;
int minimumComponentSize;
std::filesystem::path path = std::filesystem::u8path(argv[1]);
std::string outputFolder = argv[2];
std::string color = argv[3];

std::stringstream convert{argv[4]};
if (!(convert >> gaussianBlur))
{
gaussianBlur = 1.5; // default value
}

std::stringstream convertK{argv[5]};
if (!(convertK >> kValue))
{
kValue = 900; // default value
}

std::stringstream convertMin{argv[6]};
if (!(convertMin >> minimumComponentSize))
{
minimumComponentSize = 900;
}
....

如您所见,我正在为每个要转换为数字类型的参数创建一个 stringstream变量。我无法将另一个值重新分配给 stringstream变量。有没有办法从单个 stringstream转换所有参数?有一个更好的方法吗?

最佳答案

您可以将所需的argv值写入单个stringstream(以空格分隔),然后将其分别读出到相应的变量中:

//...
std::stringstream convert;
convert << argv[4] << " " << argv[5] << " " argv[6]; // Add more "argv" strings
convert >> gaussianBlur >> kValue >> minimumComponentSize; // Read more values
//...

但是,当然,错误条件的检查要棘手一些。如果需要,您可以一次从该(单个) stringstream中读取一项,就像您已经做的那样:

if (!(convert >> gaussianBlur))
{
gaussianBlur = 1.5; // default value
}
if (!(convert >> kValue))
{
kValue = 900; // default value
}
if (!(convert >> minimumComponentSize))
{
minimumComponentSize = 900;
}

关于c++ - 我们可以从单个std::stringstream转换多个命令行参数吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62385847/

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