将浮点数与参数内的字符串连接起来

Concatenate float with a string inside the arguments

马上,不,这不是重复的。我一直在寻找几个小时来做​​这件事,但它可能很简单,因为我几周前就开始编码了。

如何在参数中连接字符串和浮点数?

我希望能够做到这一点,但它不起作用:

system("xdotool mousemove " <<  << " " << );

是的,这是 C++,只是我在 Bison 内部使用它,所以 $2 和 $3 是变量(它们是浮点数)。就像在 Bison 文件中一样,我有很多事情要做,我希望在一行中有一个解决方案,就像我在这里使用的格式一样

编辑

这里的问题实际上是串联。我这样做了,但它仍然不起作用,并给了我同样的错误:

string temp = "xdotool mousemove " <<  << " " << ; system(temp.c_str());

编辑 2

抱歉做了这么多编辑,但我试过了

system(("xdotool mousemove " + to_string() + " " + to_string()).c_str());

但它仍然不起作用:(还有其他想法吗?这次错误显示 ‘to_string’ was not declared in this scope

亲切的问候,
马修·萨内特拉

<< 不是字符串连接运算符。你想到的用法是:

std::cout << "The value is " << x << '\n';

仔细检查上面一行会发现它根本不涉及astd::string的使用; << 运算符的左侧参数始终是 std::ostream&。 (第一个是明确指定的,另外两个是前面 << 运算符的结果,在本例中是 returns astd::ostream&&。)

您从编译器获得的错误消息完全正确,您应该花时间理解它告诉您的内容,至少如果您的目标是学习如何编写 C++ 程序。

C++ 标准库重载了 + 运算符来连接 std::string 对象。但是像 "xdotool" 这样的字符串文字不是 std::string;它是 char 的数组。您还可以使用 +std::string 与 C 风格字符串(即以 NUL 结尾的字符数组)连接起来,但如果参数.

并且没有从数字到字符串的自动转换,也没有需要 std::string 和数字的 + 重载。如果您使用的是 C++11 或更新的版本,那么您可以使用 std::to_string 来显式转换。

您尝试使用 << 运算符的常用方法涉及使用类似输出流的对象,该对象仅创建一个内存中字符串缓冲区:std::ostringstream。 Thar 对象实现 str 方法将缓冲区提取为 std::string;请参阅示例 here,了解与您想要执行的操作类似的内容。

但是,正如我提到的,std::string 不是 char 的简单数组,因此您不能将其传递给需要 C 样式字符串的函数。这包括标准 C 库中的所有函数,例如 system,它对 C++ std::string 一无所知。所以需要使用std::string对象的c_str成员函数将其数据提取为C风格的字符串。