我们如何在C ++中将int添加到字符串?

时间:2020-03-05 18:53:59  来源:igfitidea点击:
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的&lt;&lt;运算符返回对ostream的引用,因此我们可以继续链接&lt;&lt;操作。也就是说,以上内容基本上与以下内容相同:

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;
}