как вы добавляете int к строке в c ++?

<pre><code>int i = 4; string text = "player "; cout << (text + i); </code></pre><p>я хотел бы напечатать <code>player 4</code>.</p><p>выше очевидно, что это неправильно, но это показывает, что я пытаюсь сделать здесь. есть ли простой способ сделать это, или я должен начать добавлять новые включения?</p>

<p>с c++ 11 вы можете написать:</p><pre><code>#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); </code></pre>

<p>ну, если вы используете cout, вы можете просто записать целое число прямо в него, как в</p><pre><code>std::cout << text << i; </code></pre><p>c++ способ конвертировать все виды объектов в строки через <a href="http://en.cppreference.com/w/cpp/io/basic\_stringstream">строковые потоки</a> . если у вас нет под рукой, просто создайте его.</p><pre><code>#include <sstream> std::ostringstream oss; oss << text << i; std::cout << oss.str(); </code></pre><p>кроме того, вы можете просто преобразовать целое число и добавить его в строку.</p><pre><code>oss << i; text += oss.str(); </code></pre><p>наконец, библиотеки boost предоставляют <a href="http://www.boost.org/doc/libs/release/doc/html/boost\_lexical\_cast.html"><code>boost::lexical\_cast</code></a> , который оборачивает преобразование потока строк с помощью синтаксиса, подобного встроенному приведению типов.</p><pre><code>#include <boost/lexical\_cast.hpp> text += boost::lexical\_cast<std::string>(i); </code></pre><p>это также работает наоборот, то есть для анализа строк.</p>

<pre><code>printf("player %d", i); </code></pre><p>(пропусти мой ответ, сколько захочешь; я до сих пор ненавижу операторы ввода-вывода c++.)</p><p>:-п</p>

<p>они работают для общих строк (в случае, если вы не хотите выводить в файл/консоль, но сохраните для дальнейшего использования или чего-то еще).</p><p>boost.lexical\_cast</p><pre><code>mystr += boost::lexical\_cast<std::string>(myint); </code></pre><p>струнные потоки</p><pre><code>//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; </code></pre>

<p>для записи вы также можете использовать <a href="http://www.cplusplus.com/reference/iostream/stringstream/stringstream.html"><code>std::stringstream</code></a> , если вы хотите создать строку до ее фактического вывода.</p>

<pre><code>cout << text << " " << i << endl; </code></pre>

<p>ваш пример, кажется, указывает, что вы хотели бы отобразить строку, за которой следует целое число, в этом случае:</p><pre><code>string text = "player: "; int i = 4; cout << text << i << endl; </code></pre><p>будет работать нормально.</p><p>но, если вы собираетесь хранить строки или передавать их и делать это часто, вы можете выиграть от перегрузки оператора сложения. я продемонстрирую это ниже:</p><pre><code>#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; } </code></pre><p>фактически, вы можете использовать шаблоны, чтобы сделать этот подход более мощным:</p><pre><code>template <class t> std::string operator+(std::string const &a, const t &b){ std::ostringstream oss; oss << a << b; return oss.str(); } </code></pre><p>теперь, пока объект <code>b</code> имеет определенный поток вывода, вы можете добавить его к вашей строке (или, по крайней мере, к ее копии).</p>

<p>другая возможность <a href="http://www.boost.org/doc/libs/release/libs/format/doc/format.html">boost.format</a> :</p><pre><code>#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; } </code></pre>

<p>вот небольшой рабочий пример преобразования/добавления, с некоторым кодом, который мне был нужен раньше.</p><pre><code>#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; } </code></pre><p>вывод будет:</p><pre><code>/dev/video /dev/video456 /dev/video321 /dev/video123 </code></pre><p>обратите внимание, что в последних двух строках вы сохраняете измененную строку до того, как она будет фактически распечатана, и вы можете использовать ее позже, если это необходимо.</p>

<p>для записи вы также можете использовать класс <code>qstring</code> в qt:</p><pre><code>#include <qtcore/qstring> int i = 4; qstring qs = qstring("player %1").arg(i); std::cout << qs.tolocal8bit().constdata(); // prints "player 4" </code></pre>

<pre><code>cout << "player" << i ; </code></pre>

<pre><code>cout << text << i; </code></pre>

<p>одним из методов здесь является прямая печать вывода, если это требуется в вашей задаче.</p><pre><code>cout << text << i; </code></pre><p>иначе, одним из самых безопасных методов является использование</p><pre><code>sprintf(count, "%d", i); </code></pre><p>а затем скопируйте его в свою "текстовую" строку.</p><pre><code>for(k = 0; *(count + k); k++) { text += count[k]; } </code></pre><p>таким образом, у вас есть требуемая строка вывода</p><p>для получения дополнительной информации о <code>sprintf</code>, следуйте: <a href="http://www.cplusplus.com/reference/cstdio/sprintf">http://www.cplusplus.com/reference/cstdio/sprintf</a> </p>

<pre><code>cout << text << i; </code></pre><p>оператор <code><<</code> для ostream возвращает ссылку на ostream, так что вы можете просто продолжать цепочку операций <code><<</code>. то есть вышесказанное в основном совпадает с:</p><pre><code>cout << text; cout << i; </code></pre>

<pre><code>cout << text << " " << i << endl; </code></pre>

<p>вы также пытаетесь объединить номер игрока с помощью <code>std::string::push\_back</code>:</p><p>пример с вашим кодом:</p><pre><code>int i = 4; string text = "player "; text.push\_back(i + '0'); cout << text; </code></pre><p>вы увидите в консоли:</p><blockquote> <p>игрок 4</p> </blockquote>

<p><strong>самый простой способ, которым я мог понять это, заключается в следующем ..</strong><br> он будет работать как <strong>одна строка</strong> и <strong>массив строк</strong>. я рассматриваю строковый массив, так как он сложный (чуть-чуть же будет следовать строка). я создаю массив имен и <strong>добавляем</strong> некоторое целое число и символ с ним, чтобы показать, как легко добавить некоторые <strong>int</strong> и <strong>chars</strong> в строку, надеюсь, поможет. длина просто для измерения размера массива. если вы знакомы с программированием, то <strong>size\_t</strong> без знака <strong>int</strong></p><pre><code>#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; } } </code></pre>