在 C++ 中如何将 int 附加到字符串?

发布于 2024-07-04 21:24:40 字数 202 浏览 9 评论 0原文

int i = 4;
string text = "Player ";
cout << (text + i);

我希望它打印 Player 4

上面的内容显然是错误的,但它显示了我在这里尝试做的事情。 有没有一种简单的方法可以做到这一点,或者我是否必须开始添加新的包含内容?

int i = 4;
string text = "Player ";
cout << (text + i);

I'd like it to print Player 4.

The above is obviously wrong but it shows what I'm trying to do here. Is there an easy way to do this or do I have to start adding new includes?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(20

高跟鞋的旋律 2024-07-11 21:24:40
cout << text << i;

ostream 的 << 运算符返回对 ostream 的引用,因此您可以继续链接 << 操作。 也就是说,上面的内容基本等同于:

cout << text;
cout << i;
cout << text << i;

The << operator for ostream returns a reference to the ostream, so you can just keep chaining the << operations. That is, the above is basically the same as:

cout << text;
cout << i;
落花随流水 2024-07-11 21:24:40

您可以使用以下内容

int i = 4;
string text = "Player ";
text+=(i+'0');
cout << (text);

You can use the following

int i = 4;
string text = "Player ";
text+=(i+'0');
cout << (text);
薔薇婲 2024-07-11 21:24:40

如果使用 Windows/MFC,并且需要字符串不仅仅是立即输出,请尝试:

int i = 4;
CString strOutput;
strOutput.Format("Player %d", i);

If using Windows/MFC, and need the string for more than immediate output try:

int i = 4;
CString strOutput;
strOutput.Format("Player %d", i);
病女 2024-07-11 21:24:40

您还可以尝试将玩家的号码与 std::string::push_back 连接起来:

示例与您的代码:

int i = 4;
string text = "Player ";
text.push_back(i + '0');
cout << text;

您将在控制台中看到:

玩家 4

You also try concatenate player's number with std::string::push_back :

Example with your code:

int i = 4;
string text = "Player ";
text.push_back(i + '0');
cout << text;

You will see in console:

Player 4

青芜 2024-07-11 21:24:40

我能解决这个问题的最简单方法如下..
它将作为单个字符串字符串数组工作。
我正在考虑一个字符串数组,因为它很复杂(字符串后面会有点相同)。
我创建了一个名称数组,并附加一些整数和字符,以显示将一些int字符附加到字符串是多么容易,希望能帮助到你。
length 只是衡量数组的大小。 如果您熟悉编程,那么 size_t 是一个无符号 int

#include<iostream>
    #include<string>
    using namespace std;
    int main() {

        string names[] = { "amz","Waq","Mon","Sam","Has","Shak","GBy" }; //simple array
        int length = sizeof(names) / sizeof(names[0]); //give you size of array
        int id;
        string append[7];    //as length is 7 just for sake of storing and printing output 
        for (size_t i = 0; i < length; i++) {
            id = rand() % 20000 + 2;
            append[i] = names[i] + to_string(id);
        }
        for (size_t i = 0; i < length; i++) {
            cout << append[i] << endl;
        }


}

The easiest way I could figure this out is the following..
It will work as a single string and string array.
I am considering a string array, as it is complicated (little bit same will be followed with string).
I create a array of names and append some integer and char with it to show how easy it is to append some int and chars to string, hope it helps.
length is just to measure the size of array. If you are familiar with programming then size_t is a unsigned int

#include<iostream>
    #include<string>
    using namespace std;
    int main() {

        string names[] = { "amz","Waq","Mon","Sam","Has","Shak","GBy" }; //simple array
        int length = sizeof(names) / sizeof(names[0]); //give you size of array
        int id;
        string append[7];    //as length is 7 just for sake of storing and printing output 
        for (size_t i = 0; i < length; i++) {
            id = rand() % 20000 + 2;
            append[i] = names[i] + to_string(id);
        }
        for (size_t i = 0; i < length; i++) {
            cout << append[i] << endl;
        }


}
我一直都在从未离去 2024-07-11 21:24:40
cout << text << " " << i << endl;
cout << text << " " << i << endl;
混吃等死 2024-07-11 21:24:40
cout << "Player" << i ;
cout << "Player" << i ;
惜醉颜 2024-07-11 21:24:40

这里的一种方法是直接打印输出(如果您的问题需要)。

cout << text << i;

否则,最安全的方法之一是使用

sprintf(count, "%d", i);

然后将其复制到您的“文本”字符串。

for(k = 0; *(count + k); k++)
{ 
  text += count[k]; 
} 

这样,您就获得了所需的输出字符串

有关 sprintf 的更多信息,请执行以下操作:
http://www.cplusplus.com/reference/cstdio/sprintf

One method here is directly printing the output if its required in your problem.

cout << text << i;

Else, one of the safest method is to use

sprintf(count, "%d", i);

And then copy it to your "text" string .

for(k = 0; *(count + k); k++)
{ 
  text += count[k]; 
} 

Thus, you have your required output string

For more info on sprintf, follow:
http://www.cplusplus.com/reference/cstdio/sprintf

并安 2024-07-11 21:24:40

有几个选项,您想要哪一个取决于上下文。

最简单的方法是

std::cout << text << i;

或者如果您希望在一行中执行此操作

std::cout << text << i << endl;

如果您正在编写一个单线程程序并且您没有多次调用此代码(其中“很多”是每秒数千次),那么您就完成了。

如果您正在编写一个多线程程序,并且有多个线程正在写入 cout,那么这一简单的代码可能会给您带来麻烦。 假设编译器附带的库使 cout 线程足够安全,对它的任何单个调用都不会被中断。 现在假设一个线程正在使用此代码写入“Player 1”,另一个线程正在写入“Player 2”。 如果你幸运的话,你会得到以下结果:

Player 1
Player 2

如果你不幸运,你可能会得到类似以下的

Player Player 2
1

结果 问题是 std::cout << 文本<< 我<< 结束; 变成3个函数调用。 该代码等效于以下内容:

std::cout << text;
std::cout << i;
std::cout << endl;

如果您使用 C 风格的 printf,并且您的编译器再次提供了具有合理线程安全性的运行时库(每个函数调用都是原子的),那么以下代码会更好地工作:

printf("Player %d\n", i);

能够做某事在单个函数调用中,io 库可以在幕后提供同步,现在您的整行文本将被原子写入。

对于简单的程序,std::cout 非常有用。 添加多线程或其他复杂功能,不太时尚的 printf 开始看起来更有吸引力。

There are a few options, and which one you want depends on the context.

The simplest way is

std::cout << text << i;

or if you want this on a single line

std::cout << text << i << endl;

If you are writing a single threaded program and if you aren't calling this code a lot (where "a lot" is thousands of times per second) then you are done.

If you are writing a multi threaded program and more than one thread is writing to cout, then this simple code can get you into trouble. Let's assume that the library that came with your compiler made cout thread safe enough than any single call to it won't be interrupted. Now let's say that one thread is using this code to write "Player 1" and another is writing "Player 2". If you are lucky you will get the following:

Player 1
Player 2

If you are unlucky you might get something like the following

Player Player 2
1

The problem is that std::cout << text << i << endl; turns into 3 function calls. The code is equivalent to the following:

std::cout << text;
std::cout << i;
std::cout << endl;

If instead you used the C-style printf, and again your compiler provided a runtime library with reasonable thread safety (each function call is atomic) then the following code would work better:

printf("Player %d\n", i);

Being able to do something in a single function call lets the io library provide synchronization under the covers, and now your whole line of text will be atomically written.

For simple programs, std::cout is great. Throw in multithreading or other complications and the less stylish printf starts to look more attractive.

留一抹残留的笑 2024-07-11 21:24:40
cout << text << i;
cout << text << i;
飘然心甜 2024-07-11 21:24:40

这是一个小的工作转换/附加示例,其中包含我之前需要的一些代码。

#include <string>
#include <sstream>
#include <iostream>

using namespace std;

int main(){
string str;
int i = 321;
std::stringstream ss;
ss << 123;
str = "/dev/video";
cout << str << endl;
cout << str << 456 << endl;
cout << str << i << endl;
str += ss.str();
cout << str << endl;
}

输出将是:

/dev/video
/dev/video456
/dev/video321
/dev/video123

请注意,在最后两行中,您在实际打印之前保存了修改后的字符串,如果需要,您可以稍后使用它。

Here a small working conversion/appending example, with some code I needed before.

#include <string>
#include <sstream>
#include <iostream>

using namespace std;

int main(){
string str;
int i = 321;
std::stringstream ss;
ss << 123;
str = "/dev/video";
cout << str << endl;
cout << str << 456 << endl;
cout << str << i << endl;
str += ss.str();
cout << str << endl;
}

the output will be:

/dev/video
/dev/video456
/dev/video321
/dev/video123

Note that in the last two lines you save the modified string before it's actually printed out, and you could use it later if needed.

谁许谁一生繁华 2024-07-11 21:24:40

另一种可能性是 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;
}

Another possibility is 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;
}
十级心震 2024-07-11 21:24:40

作为记录,您还可以使用 Qt 的 QString 类:

#include <QtCore/QString>

int i = 4;
QString qs = QString("Player %1").arg(i);
std::cout << qs.toLocal8bit().constData();  // prints "Player 4"

For the record, you could also use Qt's QString class:

#include <QtCore/QString>

int i = 4;
QString qs = QString("Player %1").arg(i);
std::cout << qs.toLocal8bit().constData();  // prints "Player 4"
酒浓于脸红 2024-07-11 21:24:40

您的示例似乎表明您希望显示一个字符串后跟一个整数,在这种情况下:

string text = "Player: ";
int i = 4;
cout << text << i << endl;

可以正常工作。

但是,如果您要存储字符串位置或传递它,并且经常执行此操作,则重载加法运算符可能会受益。 我在下面演示了这一点:

#include <sstream>
#include <iostream>
using namespace std;

std::string operator+(std::string const &a, int b) {
  std::ostringstream oss;
  oss << a << b;
  return oss.str();
}

int main() {
  int i = 4;
  string text = "Player: ";
  cout << (text + i) << endl;
}

事实上,您可以使用模板来使这种方法更加强大:

template <class T>
std::string operator+(std::string const &a, const T &b){
  std::ostringstream oss;
  oss << a << b;
  return oss.str();
}

现在,只要对象 b 具有定义的流输出,您就可以将其附加到字符串中(或者,在至少,一份副本)。

Your example seems to indicate that you would like to display the a string followed by an integer, in which case:

string text = "Player: ";
int i = 4;
cout << text << i << endl;

would work fine.

But, if you're going to be storing the string places or passing it around, and doing this frequently, you may benefit from overloading the addition operator. I demonstrate this below:

#include <sstream>
#include <iostream>
using namespace std;

std::string operator+(std::string const &a, int b) {
  std::ostringstream oss;
  oss << a << b;
  return oss.str();
}

int main() {
  int i = 4;
  string text = "Player: ";
  cout << (text + i) << endl;
}

In fact, you can use templates to make this approach more powerful:

template <class T>
std::string operator+(std::string const &a, const T &b){
  std::ostringstream oss;
  oss << a << b;
  return oss.str();
}

Now, as long as object b has a defined stream output, you can append it to your string (or, at least, a copy thereof).

梦中楼上月下 2024-07-11 21:24:40

这些适用于一般字符串(如果您不想输出到文件/控制台,而是存储以供以后使用或其他)。

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 (for example, cout), rather than std::string
someStream << MyInt;

These work for general strings (in case you do not want to output to file/console, but store for later use or something).

boost.lexical_cast

MyStr += boost::lexical_cast<std::string>(MyInt);

String streams

//sstream.h
std::stringstream Stream;
Stream.str(MyStr);
Stream << MyInt;
MyStr = Stream.str();

// If you're using a stream (for example, cout), rather than std::string
someStream << MyInt;
や莫失莫忘 2024-07-11 21:24:40

作为记录,您还可以使用 std::stringstream如果您想在实际输出之前创建字符串。

For the record, you can also use a std::stringstream if you want to create the string before it's actually output.

甩你一脸翔 2024-07-11 21:24:40
cout << text << " " << i << endl;
cout << text << " " << i << endl;
八巷 2024-07-11 21:24:40
printf("Player %d", i);

(你可以否决我的答案;我仍然讨厌 C++ I/O 运算符。)

:-P

printf("Player %d", i);

(Downvote my answer all you like; I still hate the C++ I/O operators.)

:-P

謌踐踏愛綪 2024-07-11 21:24:40

使用 C++11,您可以编写:

#include <string>     // to use std::string, std::to_string() and "+" operator acting on strings 

int i = 4;
std::string text = "Player ";
text += std::to_string(i);

With C++11, you can write:

#include <string>     // to use std::string, std::to_string() and "+" operator acting on strings 

int i = 4;
std::string text = "Player ";
text += std::to_string(i);
寄居者 2024-07-11 21:24:40

好吧,如果您使用 cout,则可以直接将整数写入其中,如

std::cout << text << i;

The C++ way of conversion all types objects to strings is through 字符串流。 如果您手头没有,只需创建一个即可。

#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);

反之亦然,即解析字符串。

Well, if you use cout you can just write the integer directly to it, as in

std::cout << text << i;

The C++ way of converting all kinds of objects to strings is through string streams. If you don't have one handy, just create one.

#include <sstream>

std::ostringstream oss;
oss << text << i;
std::cout << oss.str();

Alternatively, you can just convert the integer and append it to the string.

oss << i;
text += oss.str();

Finally, the Boost libraries provide boost::lexical_cast, which wraps around the stringstream conversion with a syntax like the built-in type casts.

#include <boost/lexical_cast.hpp>

text += boost::lexical_cast<std::string>(i);

This also works the other way around, i.e. to parse strings.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文