c++ - C++:从单个 std::stringstream 转换多个命令行参数
问题描述
我有一个程序,它从命令行输入多个字符串和数字变量。由于我想将少量输入转换为数字类型,因此我一直按照learncppstd::stringstream
的建议使用。目前,我的代码看起来像:
主文件
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;
}
推荐阅读
- python - 根据组过滤 DataFrame 行
- sql - 如何在 Oracle SQL 中使用 REGEXP_REPLACE 根据多个条件准确识别要替换的单词?
- python - 调用日志配置函数后“'NoneType'对象没有属性'info'”
- kubernetes - 命名空间中所有部署的 kubectl 部署状态
- c - 在 aix 中使用 free() 函数时(静态区域 free())
- c# - 在 dynamodb c# 中使用 GetRemaining() 无法更快地加载数据?
- node.js - 如何在 GitLabCI 的 node:10 容器中执行 docker 命令
- spring - 如何解决使用 Maven 导入 spring 应用程序的问题?
- php - 从多维数组中获取数组值
- actionscript-3 - 你能告诉我我的错吗?这是关于如果嵌套(flash cs6 as3)