it-swarm-eu.dev

Come si aggiunge un int a una stringa in C ++?

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

Mi piacerebbe che stampasse Player 4.

Quanto sopra è ovviamente sbagliato ma mostra ciò che sto cercando di fare qui. C'è un modo semplice per farlo o devo iniziare ad aggiungere nuovi include?

142
Wawa

Con C++ 11 puoi scrivere:

#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

Bene, se usi cout puoi semplicemente scrivere il numero intero direttamente ad esso, come in

std::cout << text << i;

Il modo C++ per convertire tutti i tipi di oggetti in stringhe è attraverso string stream . Se non ne hai uno a portata di mano, creane uno.

#include <sstream>

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

In alternativa, puoi semplicemente convertire il numero intero e aggiungerlo alla stringa.

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

Infine, le librerie Boost forniscono boost::lexical_cast , che avvolge la conversione stringstream con una sintassi come i cast di tipo built-in.

#include <boost/lexical_cast.hpp>

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

Ciò funziona anche al contrario, ovvero per analizzare le stringhe.

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

(Svuota la mia risposta tutto ciò che ti piace, odio ancora gli operatori di I/O C++.)

:-P

111
Eric

Questi funzionano per le stringhe generali (nel caso in cui non si desideri eseguire l'output su file/console, ma archiviare per un utilizzo futuro o qualcosa del genere).

boost.lexical_cast

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

Stream di stringhe

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

Per la cronaca, puoi anche usare un std::stringstream se vuoi creare la stringa prima che sia effettivamente emessa.

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

Il tuo esempio sembra indicare che ti piacerebbe visualizzare una stringa seguita da un intero, nel qual caso:

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

funzionerebbe benissimo.

Ma, se stai memorizzando i posti delle stringhe o passandoli intorno, e facendo così frequentemente, potresti trarre vantaggio da un sovraccarico dell'operatore addizione. Lo dimostro di seguito:

#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 effetti, puoi usare i modelli per rendere questo approccio più potente:

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

Ora, finché l'oggetto b ha un output di flusso definito, è possibile aggiungerlo alla stringa (o, almeno, una sua copia).

4
Richard

Un'altra possibilità è 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

Ecco un piccolo esempio di conversione/aggiunta di lavoro, con un codice che avevo bisogno prima.

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

l'output sarà:

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

Notare che nelle ultime due righe si salva la stringa modificata prima che sia effettivamente stampata, e si potrebbe usare in seguito, se necessario.

2
Robert Parcus

Per la cronaca, puoi anche usare la classe QString di 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

Un metodo qui sta direttamente stampando l'output se richiesto nel tuo problema.

cout << text << i;

Altrimenti, uno dei metodi più sicuri è quello di utilizzare

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

E quindi copiarlo nella stringa "testo".

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

Quindi, hai la stringa di output richiesta

Per maggiori informazioni su sprintf, seguire: http://www.cplusplus.com/reference/cstdio/sprintf

1
Saurabh Mishra
cout << text << i;

L'operatore << per ostream restituisce un riferimento all'ostream, quindi puoi continuare a concatenare le operazioni <<. Cioè, quanto sopra è fondamentalmente lo stesso di:

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

Prova anche a concatenare il numero del giocatore con std::string::Push_back:

Esempio con il tuo codice:

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

Vedrai in console:

Giocatore 4

Il modo più semplice per scoprirlo è il seguente ..
Funzionerà come stringa singola e stringa array. Sto considerando un array di stringhe, in quanto è complicato (un po 'lo stesso verrà seguito con una stringa). Creo una serie di nomi e append qualche intero e char con esso per mostrare quanto sia facile aggiungere alcuni int e chars alla stringa, spero che sia d'aiuto. la lunghezza è solo per misurare la dimensione della matrice. Se hai familiarità con la programmazione allora size_t è un 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;
        }


}
0
Code Black