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

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

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

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

С C ++ 11 вы можете написать:

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

Ну, если вы используете cout, вы можете просто написать целое число прямо к нему, как в

 std::cout << text << i; 

C ++ способ преобразования всех видов объектов в строки осуществляется через строковые streamи . Если у вас нет одной удобной, просто создайте ее.

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

Кроме того, вы можете просто преобразовать целое число и добавить его в строку.

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

Наконец, библиотеки Boost предоставляют boost::lexical_cast , который обертывает преобразование строк с помощью синтаксиса, подобного встроенным типу.

 #include  text += boost::lexical_cast(i); 

Это также работает наоборот, т. Е. Анализировать строки.

 printf("Player %d", i); 

(Дайте мне ответ на все, что вам нравится, я все еще ненавижу операторов C ++ IO.)

:-П

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

boost.lexical_cast

 MyStr += boost::lexical_cast(MyInt); 

строковые streamи

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

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

 cout << text << " " << i << endl; 

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

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

будет работать нормально.

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

 #include  #include  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  std::string operator+(std::string const &a, const T &b){ std::ostringstream oss; oss << a << b; return oss.str(); } 

Теперь, пока объект b имеет определенный stream вывода, вы можете добавить его в свою строку (или, по крайней мере, ее копию).

Другая возможность – Boost.Format :

 #include  #include  #include  int main() { int i = 4; std::string text = "Player"; std::cout << boost::format("%1% %2%\n") % text % i; } 

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

 #include  #include  #include  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 

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

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

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

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

 cout << text << i; 

Кроме того, одним из самых безопасных способов является использование

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

А затем скопируйте его в строку «text».

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

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

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

Самый простой способ понять это – следующее.
Он будет работать как единый массив строк и строк . Я рассматриваю строковый массив, поскольку он является сложным (немного будет следовать за строкой). Я создаю массив имен и добавляю некоторое целое число и char с ним, чтобы показать, насколько легко добавлять некоторые строки и символы в строку, надеясь, что это поможет. length – это просто размер массива. Если вы знакомы с программированием, тогда size_t представляет собой unsigned int

 #include #include 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; } } 
 cout << text << i; 

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

 cout << text; cout << i; 
 cout << text << " " << i << endl; 

Есть несколько вариантов, и один из них зависит от контекста.

Самый простой способ

 std::cout << text << i; 

или если вы хотите это на одной строке

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

Если вы пишете одну поточную программу, и если вы не вызываете этот код много (где «много» - тысячи раз в секунду), тогда вы закончите.

Если вы пишете многопоточную программу, и более одного streamа записывает в cout, тогда этот простой код может вызвать у вас проблемы. Предположим, что библиотека, поставляемая вместе с вашим компилятором, сделала stream cout безопасным, чем любой его вызов, не будет прерван. Теперь предположим, что один stream использует этот код для записи «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; 

Если вместо этого вы использовали printf типа C, и снова ваш компилятор предоставил библиотеку времени выполнения с разумной безопасностью streamа (каждый вызов функции является атомарным), тогда следующий код будет работать лучше:

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

Возможность сделать что-то в одном вызове функции позволяет библиотеке io обеспечить синхронизацию под обложками, и теперь вся ваша строка текста будет атомарно записана.

Для простых программ std :: cout отлично. Бросьте multithreading или другие осложнения, и менее стильный printf начинает выглядеть более привлекательно.

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

Пример с кодом:

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

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

Игрок 4

Вы можете использовать следующие

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

Если вы используете Windows / MFC и вам нужна строка для более чем немедленного вывода, попробуйте:

 int i = 4; CString strOutput; strOutput.Format("Player %d", i); 
  • Альтернатива itoa () для преобразования целого в строку C ++?
  • Я хочу преобразовать std :: string в const wchar_t *
  • Как конкатенировать std :: string и int?
  • Как заменить все вхождения символа в строке?
  • char * vs std :: string в c ++
  • Давайте будем гением компьютера.