0

我有一个 c++ 程序,我希望 main (argv[1]) 的第一个参数对应于一个浮点表。有可能这样做吗?

我正在考虑将我的浮点数放入一个用空格分隔的字符串(例如“1.12 3.23 4.32 1.1 ...”)有没有办法自动将这样的字符串转换为浮点数表?如果我理解得很好, atof 函数会将字符串转换为双精度。因此,似乎可以使用空格拆分我的字符串,然后使用 atof 转换每个部分。这个选项对我来说似乎不是很有效?此外,它返回双精度而不是浮点数 :(

那么,有没有更好的方法将浮点表作为 c++ 程序的参数传递?

谢谢

4

4 回答 4

4

Astringstream既可以在空格处进行拆分,也可以将其解析为浮点数。

std::stringstream ss(the_string);
std::vector<float> v(std::istream_iterator<float>(ss),
                     (std::istream_iterator<float>()));
                   // the extra parentheses here are ugly but necessary :(

如何获取带有数据的字符串取决于它有多大以及它应该来自哪里。请记住,在许多系统中,传递给 program 的参数已经被空格分隔,将每个部分放在argv.

于 2012-08-10T10:47:26.357 回答
2

将其保存在文本文件中,然后在程序启动时从文件中读取。我不值得将它作为命令行参数传递。

于 2012-08-10T10:41:59.057 回答
0

main() 参数列表保持原样。您可以将数字字符串作为参数传递给程序。主函数必须解析它的参数。

当您想要传递一个空格分隔的数字列表时,argv[1]您可以使用该strtok函数来获取各个数字字符串,并且必须将其传递给转换函数。

当您的转换函数返回双精度时,您应该检查结果是否可以用浮点数表示并将值转换为浮点变量。但我会考虑使用 double 作为内部表示。

于 2012-08-10T10:46:47.867 回答
0

除了 Singer 的回答:命令行应该主要由人类使用,而不是计算机。如果您确实需要值,请使用配置文件。您始终可以使用人类可读的格式。

于 2012-08-10T10:48:10.923 回答