我们如何在C ++中将int添加到字符串?
int i = 4; string text = "Player "; cout << (text + i);
我想打印" Player 4"。
上面显然是错误的,但是它显示了我在这里想要做的事情。有没有简单的方法可以做到这一点,还是我必须开始添加新的包含?
解决方案
回答
cout << "Player" << i ;
回答
cout << text << i;
回答
cout << text << " " << i << endl;
回答
cout << text << i;
ostream的<<
运算符返回对ostream的引用,因此我们可以继续链接<<
操作。也就是说,以上内容基本上与以下内容相同:
cout << text; cout << i;
回答
cout << text << " " << i << endl;
回答
作为记录,如果我们想在实际输出字符串之前创建它,也可以使用std :: stringstream
。
回答
这些适用于常规字符串(以防我们不想输出到文件/控制台,而是存储以备后用)。
boost.lexical_cast
MyStr += boost::lexical_cast<std::string>(MyInt);
串流
//sstream.h std::stringstream Stream; Stream.str(MyStr); Stream << MyInt; MyStr = Stream.str(); //if you're using a stream (eg cout), rather than std::string someStream << MyInt;
回答
printf("Player %d", i);
(请随心所欲地回答我的问题,但我仍然讨厌C ++ IO运算符。)
:-P
回答
好吧,如果我们使用cout,则可以直接将整数写入其中,如下所示:
std::cout << text << i;
将各种对象转换为字符串的C ++方法是通过字符串流。如果我们没有一个方便的工具,只需创建一个即可。
#include <sstream> std::ostringstream oss; oss << text << i; std::cout << oss.str();
或者,我们可以只转换整数并将其添加到字符串。
oss << i; text += oss.str();
最后,Boost库提供了" boost :: lexical_cast",它使用类似于内置类型转换的语法来包装字符串流转换。
#include <boost/lexical_cast.hpp> text += boost::lexical_cast<std::string>(i);
这也可以以另一种方式起作用,即解析字符串。
回答
有几个选项,我们要选择哪个取决于上下文。
最简单的方法是
std::cout << text << i;
或者如果我们想单行显示
std::cout << text << i << endl;
如果我们正在编写一个单线程程序,并且不经常调用此代码("很多"是每秒数千次),那么我们就完成了。
如果我们正在编写一个多线程程序,并且有多个线程正在编写cout,那么这个简单的代码可能会给我们带来麻烦。假设编译器随附的库使cout线程安全到足以确保对cout线程的任何单个调用都不会被中断。现在,假设一个线程正在使用此代码编写" Player 1",另一个正在编写" Player 2"。如果幸运的话,我们将获得以下信息:
Player 1 Player 2
如果我们不走运,我们可能会收到类似以下的内容
Player Player 2 1
问题是std :: cout <<文本<< i << endl;变成3个函数调用。该代码等效于以下内容:
std::cout << text; std::cout << i; std::cout << endl;
如果改为使用C风格的printf,并且编译器再次提供了具有合理线程安全性的运行时库(每个函数调用都是原子的),则以下代码会更好地工作:
printf("Player %d\n", i);
能够在单个函数调用中执行某项操作,使io库可以在后台进行同步,现在整个文本行将被自动编写。
对于简单的程序,std :: cout很棒。抛出多线程或者其他复杂情况,时尚性较差的printf开始显得更具吸引力。
回答
另一种可能是Boost.Format:
#include <boost/format.hpp> #include <iostream> #include <string> int main() { int i = 4; std::string text = "Player"; std::cout << boost::format("%1% %2%\n") % text % i; }