将浮点数与参数内的字符串连接起来
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风格的字符串。
马上,不,这不是重复的。我一直在寻找几个小时来做这件事,但它可能很简单,因为我几周前就开始编码了。
如何在参数中连接字符串和浮点数?
我希望能够做到这一点,但它不起作用:
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风格的字符串。