web-dev-qa-db-ja.com

C ++で文字列にintを追加するにはどうすればよいですか?

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++の方法は、 string streams です。便利なものがない場合は、作成してください。

#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++ I/O演算子が嫌いです。)

:-P

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行では、変更した文字列を実際に印刷する前に保存し、必要に応じて後で使用できることに注意してください。

2
Robert Parcus

レコードには、QtのQStringクラスを使用することもできます。

#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

ここでの1つの方法は、問題で必要な場合に出力を直接印刷することです。

cout << text << i;

それ以外の場合、最も安全な方法の1つは

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

これを理解する最も簡単な方法は次のとおりです。
単一文字列および文字列配列として機能します。文字列配列は複雑なので、文字列配列を検討しています(文字列は少し同じです)。名前の配列とappend整数とcharを作成して、文字列にintcharsを簡単に追加できることを示します。それが役に立てば幸い。長さは配列のサイズを測定するためのものです。プログラミングに精通している場合、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