0

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

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

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

system("xdotool mousemove " << $2 << " " << $3);

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

编辑

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

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

编辑 2

很抱歉进行了这么多编辑,但我尝试过

system(("xdotool mousemove " + to_string($3) + " " + to_string($4)).c_str());

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

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

4

1 回答 1

2

<<不是字符串连接运算符。您正在考虑的用法是:

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

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

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

C++ 标准库重载了+操作符来连接std::string对象。但是像这样的字符串文字"xdotool"不是std::string; 它是一个数组char。您还可以使用+将 astd::string与 C 风格的字符串(即以 NUL 终止的字符数组)连接,但如果参数必须std::string至少有一个。

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

使用运算符的常用方法是使用<<类似输出流的对象,该对象只是创建一个内存中的字符串缓冲区: a std::ostringstream. Thar 对象实现了str将缓冲区提取为std::string; 请参阅此处的示例,了解与您想要做的类似的事情。

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

于 2017-05-06T14:08:01.030 回答