it-swarm-ru.tech

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

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

Я хотел бы напечатать Player 4.

Выше очевидно, что это неправильно, но это показывает, что я пытаюсь сделать здесь. Есть ли простой способ сделать это, или я должен начать добавлять новые включения?

142
Wawa

С 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);
223
headmyshoulder

Ну, если вы используете 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);

Это также работает наоборот, то есть для анализа строк.

189
Sebastian Redl
printf("Player %d", i);

(Пропусти мой ответ, сколько захочешь; я до сих пор ненавижу операторы ввода-вывода C++.)

:-П

111
Eric

Они работают для общих строк (в случае, если вы не хотите выводить в файл/консоль, но сохраните для дальнейшего использования или чего-то еще).

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;
19
Fire Lancer

Для записи вы также можете использовать std::stringstream , если вы хотите создать строку до ее фактического вывода.

9
Jason Baker
cout << text << " " << i << endl;
6
jjnguy

Ваш пример, кажется, указывает, что вы хотели бы отобразить строку, за которой следует целое число, в этом случае:

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 имеет определенный поток вывода, вы можете добавить его к вашей строке (или, по крайней мере, к ее копии).

4
Richard

Другая возможность 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;
}
3
Daniel James

Вот небольшой рабочий пример преобразования/добавления, с некоторым кодом, который мне был нужен раньше.

#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

Обратите внимание, что в последних двух строках вы сохраняете измененную строку до того, как она будет фактически распечатана, и вы можете использовать ее позже, если это необходимо.

2
Robert Parcus

Для записи вы также можете использовать класс QString в Qt:

#include <QtCore/QString>

int i = 4;
QString qs = QString("Player %1").arg(i);
std::cout << qs.toLocal8bit().constData();  // prints "Player 4"
2
Brian Lenoski
cout << "Player" << i ;
1
rupello
cout << text << i;
1
john

Одним из методов здесь является прямая печать вывода, если это требуется в вашей задаче.

cout << text << i;

Иначе, одним из самых безопасных методов является использование

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

А затем скопируйте его в свою "текстовую" строку.

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

Таким образом, у вас есть требуемая строка вывода

Для получения дополнительной информации о sprintf, следуйте: http://www.cplusplus.com/reference/cstdio/sprintf

1
Saurabh Mishra
cout << text << i;

Оператор << для ostream возвращает ссылку на ostream, так что вы можете просто продолжать цепочку операций <<. То есть вышесказанное в основном совпадает с:

cout << text;
cout << i;
0
introp
cout << text << " " << i << endl;
0
GEOCHET

Вы также пытаетесь объединить номер игрока с помощью std::string::Push_back:

Пример с вашим кодом:

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

Вы увидите в консоли:

Игрок 4

0

Самый простой способ, которым я мог понять это, заключается в следующем ..
Он будет работать как одна строка и массив строк. Я рассматриваю строковый массив, так как он сложный (чуть-чуть же будет следовать строка). Я создаю массив имен и добавляем некоторое целое число и символ с ним, чтобы показать, как легко добавить некоторые int и chars в строку, Надеюсь, поможет. длина просто для измерения размера массива. Если вы знакомы с программированием, то 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;
        }


}
0
Code Black